【问题标题】:Passing query results from Parse to NSArray iOS将查询结果从 Parse 传递到 NSArray iOS
【发布时间】:2013-05-30 14:10:13
【问题描述】:

我正在运行一个没有问题的查询,这是我的代码:

PFQuery *postQuery = [PFQuery queryWithClassName:@"class"];
[postQuery whereKey:@"hasRelationship" equalTo:[PFUser currentUser]];
// Run the query
[postQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        //Save results and update the table
        group = [objects valueForKey:@"groupArray"];
     }
}

效果不错,组控制台打印如下:

(
("Register one",
"Register two",
"Register three",
"Register four")
)

但我需要一个长度为 4 而不是 1 的数组。每次我通过将结果传递到 NSString“可变副本”中来剥离结果,就像这样崩溃:

( NSString *s = (NSString *)[group objectAtIndex:0];
NSString * text = (NSString *)[s mutableCopy];) 

这是错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent ***

如何将对象内的元素放入长度为 4 的NSArray?谢谢!

【问题讨论】:

  • 强制转换不是魔法,它只会让编译器误以为你的对象是一个字符串,而实际上它是一个数组。
  • 检查您如何创建打印到控制台的对象。你有一个包含另一个 NSArray 的 NSArray。您的第一个数组 count=1 因为包含另一个 NSArray。你的第二个数组是需要的,它的计数 = 4。;)
  • 我终于明白了,但感谢 cmets。这是解决方案: //将结果保存到数组中: group = [[objects valueForKey:@"groupArray"] objectAtIndex:0];

标签: ios nsarray parse-platform


【解决方案1】:

对此的简单回答。您的查询返回了一个包含四个对象的结果数组。强制转换不会改变基本对象的类型,它只是诱使编译器认为它在处理特定对象的类。它实际上并没有改变那个类。

在这个特定的例子中,它很简单。当前响应中的索引 0 处已经有一个数组:

NSArray *allGroups = group[0];

这应该在一个数组中包含所有四个字符串,可以枚举这些字符串来做任何你想做的事情。

【讨论】:

  • 不能这样做:*** 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'-[PFObject countByEnumeratingWithState:objects:count:]: 无法识别的选择器,我找到了答案并贴在上面,谢谢!
  • 您在评论中发布的答案实际上是相同的。使用 -[anArray objectAtIndex: 0] 访问数组在语法上与使用 anArray[0]; 访问数组相同
【解决方案2】:

查看他们的示例代码,了解如何使用数组objects。所以改变你的if statement 使用这个:

if (!error) {
    // The find succeeded.
    NSLog(@"Successfully retrieved %d scores.", objects.count);
    // Do something with the found objects
    for (PFObject *object in objects) {
        NSLog(@"%@", object.objectId);
        // add to your array here
    }
  } else {
    // Log details of the failure
    NSLog(@"Error: %@ %@", error, [error userInfo]);
  }
}

或者像这样简单的东西:

if (!error) {
    // copy the array
    [group addObjectsFromArray:objects];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多