代码的特定部分未在iOS中执行

时间:2015-09-30 20:51:56

标签: ios objective-c arrays image parse-platform

我正在从Parse.com检索数据,并尝试将包含此数据的图像添加到数组中。但是,有些代码没有任何明显的原因而没有被执行。这是代码:

PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"objectId" containedIn:[self.event objectForKey:@"members"]];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
    if (!error) {
        self.membersArray = [NSMutableArray arrayWithArray:users];

        [self.tableView reloadData];

        for (PFUser *user in self.membersArray) {

            [self.memberPhotosArray addObject:[NSNull null]];
            NSInteger index = [self.memberPhotosArray indexOfObject:user];

            PFFile *photoFile = [user objectForKey:@"profilePicture"];

            [photoFile getDataInBackgroundWithBlock:^(NSData *result, NSError *error) {
                if (!error) {
                    NSLog(@"Before creating image");
                    UIImage *image = [UIImage imageWithData:result];
                    [self.memberPhotosArray[index] addObject:image];
                    NSLog(@"After creating image");
                    [self.tableView reloadData];

                }
            }];

        }

    }
}];

正在执行第一个日志,此行之后的所有内容都未被调用。有人可以解释原因并提供解决方案吗?

1 个答案:

答案 0 :(得分:2)

看起来您的代码正在后台线程上运行。在主线程的最终回调块中运行代码。

if (!error) {
     NSLog(@"Before creating image");
         UIImage *image = [UIImage imageWithData:result];
     dispatch_async(dispatch_get_main_queue(), ^{
         [self.memberPhotosArray[index] addObject:image];
         NSLog(@"After creating image");
         [self.tableView reloadData];
     });
}

UI相关操作只应在主线程上执行。