2014-09-18 60 views
1

所以我想从Parse使用PFRelation查询加载用户名列表。这个想法是加载这个列表,然后在调用它的视图控制器中使用。 (通过self.yourFriendArray)。原来的问题是,当我在视图控制器的viewDidLoad方法中调用此函数时,self.yourFriendArray数组为零,因为查询同步运行并且不会更新它。iOS多线程与解析和dispatch_async

所以我的计划是使用这个findObjectsInBackgroundWithBlock调用中的主线程,但我还没有得到所需的输出。

我的多线程不正确吗?

此外,我只是习惯于提出有关堆栈溢出的问题 - 如果我问这个问题有什么问题,请在评论中建议一些更新!感谢你们!

[[friendsRelation query] findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

    for (PFUser *user in objects) { 
     NSString *username = user.username; 

     [tempArray addObject:username]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.yourFriendArray addObject:username]; 
     }); 
    } 
}]; 

回答

0

我不知道我是否很好理解你在做什么......是不是你有一个tableView从yourFriendArray加载userNames列表?然后,你需要做的唯一事情就是在更新的数组准备就绪时重新加载tableView。

[[friendsRelation query] findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

    for (PFUser *user in objects) { 

     NSString *username = user.username; 

     [self.yourFriendArray addObject:username]; 
    } 

    [self.tableView reloadData]; 
}]; 

很抱歉,如果这不是你问...

+0

谢谢回答!所以,是啊,我正试图加载数据到一个tableView,有点像SnapChat。我试过这个,但它仍然不起作用。我认为我的问题是Parse的findObjectsInBackground函数如何异步运行以及我的视图在函数运行之前如何加载。 – sebster 2014-09-18 17:58:00

+0

但是'reloadData'应该在对象被提取后重新加载它。 @ user3238594 – Dehli 2014-09-18 17:58:58

+0

我认为解析异步执行查询,但随后在主线程中执行该块。所以这应该是全部。你如何做查询?你有没有物体? – dadederk 2014-09-18 18:33:47

0

试试这个:

[[friendsRelation query] findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     for (PFUser *user in objects) { 
      NSString *username = user.username; 

      [self.yourFriendArray addObject: username]; 
     } 
     [self.tableview reloadData]; 
    }); 
}];