我想从我的类调用listdata的NSMutableArray中的Parse查询中保存PFObject。我稍后会使用listdata数组。当我遍历我的代码时,它为每个找到的对象更新了highScoreObjects数组。但是当我尝试将listdata数组设置为highScoreObjects数组时,highScoreObjects数组为空。有没有办法在查询结束后保留数据?
NSMutableArray *highScoreObjects = [[NSMutableArray alloc] initWithCapacity:5];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
// The find succeeded.
NSLog(@"Successfully retrieved %d scores.", objects.count);
// Do something with the found objects
for (PFObject *object in objects) {
[highScoreObjects addObject:object];
NSLog(@"%@", object.objectId);
}
dispatch_async(dispatch_get_main_queue(), ^ {
[self.tableView reloadData];
});
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
self.listData = highScoreObjects;
我也尝试保留一行self.listData = highScoreObjects;
在self.listData = highScoreObjects;
循环内。这没有任何区别。
答案 0 :(得分:2)
不是没有设定。它不是尚未设置。这是因为您正在使用findObjectsInBackgroundWithBlock
并且异步过程尚未完成。
在您发送重新加载表格视图的请求之前,将作业(self.listData = highScoreObjects;
)移动到块中。
答案 1 :(得分:0)
这是另一种不了解异步编程性质的情况。
考虑这种情况:
你想做一个鸡蛋三明治。你把鸡蛋煮沸,然后设置一个警报,让它们煮熟时将它们取出来,剥掉它们,将它们切碎并加到你的三明治中。等你拿着面包和黄油,然后等待闹钟响起。
你打电话给findObjectsInBackgroundWithBlock
正在煮鸡蛋。你通过它的块是闹钟以及你计划用鸡蛋煮熟的东西。
上面的代码类似于将鸡蛋煮沸,然后立即尝试在三明治上使用未煮熟/部分煮熟的鸡蛋。弄得一团糟。
解决方案是在块的末尾调用方法传递给方法。