проблема с многопоточностью / GCD и использованием синтезов - PullRequest
0 голосов
/ 13 октября 2011

Поэтому каждый раз, когда нажимается кнопка, у меня следующий вызов:

 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]);
             }];
        }
    }
}

Когда я вызываю это в первый раз, это нормально, но вызывая его во второй раз, происходит сбой со следующей ошибкой:

enter image description here

Когда я даю время этому потоку завершить и вызвать его снова, это дает мне следующее:

enter image description here

Я считаю, что это потому, что я пытаюсь использовать self.spotsResults, который в настоящее время используется другим потоком ... так как мне решить эту проблему?

1 Ответ

0 голосов
/ 13 октября 2011

Вы [object objectForKey: @ "name"] возвращаете ноль по некоторым причинам. Лучше использовать маленький трюк:

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....)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...