Iphone 多线程/GCD和使用合成的问题
因此,每次单击按钮时,我都有以下调用:Iphone 多线程/GCD和使用合成的问题,iphone,objective-c,multithreading,ipad,Iphone,Objective C,Multithreading,Ipad,因此,每次单击按钮时,我都有以下调用: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self populateSpotVenueIndex]; }); -(void)populateSpotVenueIndex { @synchronized(self.spotsResults) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self populateSpotVenueIndex];
});
-(void)populateSpotVenueIndex
{
@synchronized(self.spotsResults) {
[self.pollVenueIndex removeAllObjects];
PFQuery * query = [PFQuery queryWithClassName:@"Venue"];
for (PFObject * poll in self.spotsResults)
{
[query getObjectInBackgroundWithId:((PFObject *)[poll objectForKey:@"parent"]).objectId block:^(PFObject * object, NSError * error){
if (!error && [object objectForKey:@"name"] && [poll objectForKey:@"question"]) {
[self.pollVenueIndex setObject:[object objectForKey:@"name"] forKey:[poll objectForKey:@"question"]];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
//[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
}else
NSLog(@"Error is %@", [error userInfo]);
}];
}
}
}
当我第一次调用它时,它很好,但是第二次调用它时,它会崩溃,并出现以下错误:
当我给它一些时间让线程完成并再次调用它时,它会给我以下信息:
我相信这是因为我正在尝试使用另一个线程当前使用的self.spotsResults。。。那么我该如何解决这个问题呢?您[objectobjectforkey:@name]出于某种原因返回nil。 更好的方法是使用小技巧:
id objectToSet = [object objectForKey:@"name"];
if (objectToSet) {
[self.pollVenueIndex setObject:objectToSet forKey:[poll objectForKey:@"question"]];
} else NSLog(@"wow, object is nil for: (some info for debug....)