使用Parse和dispatch_async进行iOS多线程处理

时间:2014-09-18 17:30:02

标签: ios multithreading parse-platform

所以我尝试使用PFRelation查询从Parse加载用户名列表。我们的想法是加载此列表,然后在调用它的视图控制器中使用。 (通过self.yourFriendArray)。最初的问题是,当我在视图控制器的viewDidLoad方法中调用此函数时,self.yourFriendArray数组为nil,因为查询是同步运行的,并且不会更新它。

所以我的计划是在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];
        });
    }
}];

2 个答案:

答案 0 :(得分: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];
}];

很抱歉,如果这不是您要求的......

答案 1 :(得分: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];
    });
}];