0

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

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 ***

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

4

2 回答 2

0

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

在这种特殊情况下,它很简单。当前响应中的索引 0 处已经有一个数组:

NSArray *allGroups = group[0];

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

于 2013-05-30T14:17:50.990 回答
0

查看他们的示例代码,了解如何使用数组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];
}
于 2013-08-06T21:13:08.667 回答