iphone - 如何根据异步检索的数据更新 ViewController 的属性?

标签 iphone ios objective-c objective-c-blocks

我想更新我的 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/

相关文章:

objective-c - 如何在应用程序运行时获取控制台读数?

iphone - 如何在 iPhone 上使用 python api?

ios - viewDidLoad 中的快速设置属性不起作用,但在 viewDidAppear 中有效

android - 应用内消息与推送消息 : Pros and Cons

objective-c - 当我解析 json 时,它会将所有内容都变成 nil

ios - 使用 native 应用程序登录 Facebook

iphone - 将查询字符串添加到 NSString 的干净方法?

ios - 以编程方式设置 Xcode 模拟器、键盘和 Touch ID 设置,用于 UI 测试

iphone - Apple 推送通知无法在共享服务器上运行

iphone - UIWebView didFinishLoading 多次触发