Ios collectionView在解析块内重新加载数据

Ios collectionView在解析块内重新加载数据,ios,objective-c,Ios,Objective C,当代码运行时,它不会调用collectionView重载数据 photoArray是NSMutableArray,并在viewDidLoad中初始化 photoArray=[[NSMutableArray alloc] init]; 和解析查询 [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (!error) { for (PFObject *object

当代码运行时,它不会调用collectionView重载数据

photoArray是NSMutableArray,并在viewDidLoad中初始化

photoArray=[[NSMutableArray alloc] init];
和解析查询

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        for (PFObject *object in objects) {
            [SVProgressHUD show];

            PFFile *thumbnail = [object objectForKey:@"photo"];
            [thumbnail getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
                if (!error) {
                    NSData *imageData = data;
                    UIImage *image = [UIImage imageWithData:imageData];
                    [photosArray addObject:image];
                    [self.collectionView reloadData];

                } else {
                    NSLog(@"Error: %@ %@", error, [error userInfo]);
                }

                [SVProgressHUD dismiss];

            }];

        }

    }

请注意,相同的代码在另一个项目中工作,因此如何解决该问题它不工作的原因可能是因为您正在从后台线程重新加载。将对
reloadData
的调用包装如下:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.collectionView reloadData];
});

另一方面,不要在将对象添加到数据源的循环中执行此操作(
photosaray
)。将调度移到循环下方。

首先,不要在循环中调用
reloadData
。首先添加所有对象。第二,确保您在主线程上。
reloadData()
应该在主线程上调用。但是在解析中,完成块在主线程上执行,我(显然)不知道。移动到循环下面怎么样?