我想更新我的 ViewController self.matchedUsers
的属性,它从我通过 block 异步运行的查询中获取数据。
然后在稍后某个地方当我通过 [self.matchedUsers count]
检索计数时,我仍然得到 0,尽管知道多个对象已添加到我的属性中。我的问题是,即使我通过 block 异步检索数据,我如何确保我的属性得到更新?谢谢!
更新:
对于上下文,这里是 block :
//Way earlier in an initializer:
self.matchedUsers = [[NSMutableArray alloc] init];
//In a method much later
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error){
//Code that updates self.matchedUsers with the NSArray objects
dispatch_async(dispatch_get_main_queue(), ^{
[self.matchedUsers addObjectsFromArray: objects];
});
//Question relates to ensure how property could be updated
}
}];
最佳答案
如果您没有忘记初始化 matchedUsers
,这应该可以工作,您可以在它被更改后检查它的值,并且 array
不会丢失它的元素调度并执行 block 。
但是,我更愿意编写一个可以从任何线程调用的方法,比如说
- (void)addUser ...
@synchronized(self.usersToAdd) {
[self.usersToAdd addObjectsFromArray: array];
Enqueue on main thread {
NSArray *addingNow;
@synchronized(self.usersToAdd) {
addingNow = [self.usersToAdd copy];
[self.usersToAdd removeObjects...
}
if (addingNow.count) {
[self.users addObjectsFromArray: addingNow;
[self.tableView insertRowsWithIndexPaths...
}
}
}
}
关于iphone - 如何根据异步检索的数据更新 ViewController 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19304917/