我正在从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];
}
}];
}
}
}];
正在执行第一个日志,此行之后的所有内容都未被调用。有人可以解释原因并提供解决方案吗?
答案 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相关操作只应在主线程上执行。