Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 多线程/GCD和使用合成的问题_Iphone_Objective C_Multithreading_Ipad - Fatal编程技术网

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....)