从Parse Query中保存PFObject

时间:2013-11-19 20:34:56

标签: ios nsmutablearray parse-platform pfquery

我想从我的类调用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;循环内。这没有任何区别。

2 个答案:

答案 0 :(得分:2)

不是没有设定。它不是尚未设置。这是因为您正在使用findObjectsInBackgroundWithBlock并且异步过程尚未完成。

在您发送重新加载表格视图的请求之前,将作业(self.listData = highScoreObjects;)移动到块中。

答案 1 :(得分:0)

这是另一种不了解异步编程性质的情况。

考虑这种情况:

你想做一个鸡蛋三明治。你把鸡蛋煮沸,然后设置一个警报,让它们煮熟时将它们取出来,剥掉它们,将它们切碎并加到你的三明治中。等你拿着面包和黄油,然后等待闹钟响起。

你打电话给findObjectsInBackgroundWithBlock正在煮鸡蛋。你通过它的块是闹钟以及你计划用鸡蛋煮熟的东西。

上面的代码类似于将鸡蛋煮沸,然后立即尝试在三明治上使用未煮熟/部分煮熟的鸡蛋。弄得一团糟。

解决方案是在块的末尾调用方法传递给方法。