iOS Parse SDK:未离开fetch块作用域的被获取对象数组



场景=我试图从解析中获取数据,并将该数据存储到一个数组中,我可以在视图控制器类的任何地方使用。

问题=当我在下面运行这个时,Log 2返回"(null)"。"objects"的内容似乎不想离开findojects块。它需要,否则取回是没有意义的。

PFQuery *messageQuery = [PFQuery queryWithClassName:@"Message"];
[messageQuery whereKey:@"receiverID" equalTo:[PFUser currentUser][@"userID"]];
[messageQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    messageArray = objects;
    NSLog(@"Log 1 = %@", messageArray);
}];
NSLog(@"Log 2 = %@", messageArray);

问题=为什么会发生这种情况?或者没有发生?

我试过把NSLog和"messageArray = objects"在dispatch_async里面,它仍然返回"(null)"。到底发生了什么事?

假设findObjectsInBackgroundWithBlock()在另一个线程/队列中执行它的工作,而不是当前的线程/队列,代码流如下:

1. [messageQuery findObjectsInBackgroundWithBlock:...];
2. NSLog(@"Log 2 = %@", messageArray);
3. ^(NSArray *objects, NSError *error) {
     messageArray = objects;
     NSLog(@"Log 1 = %@", messageArray);
}

所以你的第二个日志在messageArray = objects;被调用。[messageQuery findObjectsInBackgroundWithBlock:…];立即返回并在将来调用completionBlock。如果你想在messageArray被设置时更新ViewController中的一些控件,你应该在你的completionBlock中放入相应的代码或方法调用,例如:

PFQuery *messageQuery = [PFQuery queryWithClassName:@"Message"];
[messageQuery whereKey:@"receiverID" equalTo:[PFUser currentUser][@"userID"]];
__weak tyepof(self) myself = self;
[messageQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    messageArray = objects;
    NSLog(@"Log 1 = %@", messageArray);
    [myself updateWithMessages:messageArray];

}];

__weak typeof (self) self = self;

相关内容

  • 没有找到相关文章

最新更新