использование блоков для перезагрузки сбоев данных UITableView - PullRequest
1 голос
/ 21 сентября 2011

Я в основном пытаюсь перезагрузить данные UITableView, используя блоки, когда данные загружаются обратно неблокирующим способом.

[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){
        if (!error){
            for (PFObject * vote in objects){
                if([vote objectForKey:@"note"]){
                    NSString * username = ((PFUser *)[vote objectForKey:@"voter"]).username;
                    NSLog(@"Username is %@", username);
                    [self.notes addObject:[NSDictionary dictionaryWithObject:[vote objectForKey:@"note"] forKey:username]];
                    NSLog(@"Note is %@", [vote objectForKey:@"note"]);
                }
            }
             [self.tableView reloadData];
        }

        //[MBProgressHUD hideHUDForView:self.navigationController.view animated:YES];
    }];

Проблема в том, что следующий код выдаст ошибку:

bool _WebTryThreadLock(bool), 0x246d20: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...

это внутри моего cellForRowAtIndexPath: enter image description here

Почему это так и как это исправить?

1 Ответ

4 голосов
/ 21 сентября 2011

Ошибка говорит о том, что определенный метод должен быть запущен в основном потоке (или в веб-потоке, к которому у вас нет доступа). Поскольку reloadData запускает этот метод в конце концов, один из способов решить эту проблему - заставить reloadData выполнить в основном потоке:

[self.tableView
    performSelectorOnMainThread:@selector(reloadData)
    withObject:nil
    waitUntilDone:NO
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...