2013-06-21 2 views
0

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

VC вызывает reloadData на табличном представлении. Единственное, что, если я использую делегат, reloadData поражает или пропускает (иногда это работает). Но если я отправляю уведомление, он работает отлично.

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

Почему эта проблема происходит?

+0

Вы звоните по второстепенной теме? – Durgaprasad

+0

Нет. Я решил, что они для меня MultiThread –

+0

Операции пользовательского интерфейса должны выполняться в главной теме. Это проблема здесь? – Raj

ответ

1

@ Durgaprasad is right. Может быть Копия его. Все еще добавляя к нему некоторые условия. Try,

if ([NSThread isMainThread]) 
{ 
    [self.tableView reloadData]; 
} 
else 
{ 
    [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 

} 
+0

Хорошо, я попробую это. не будет dispatch_async для работы основного потока также? –

+0

Хотя у меня мало знаний о GCD, все равно он может работать. –

0

Я считаю, что вы вызвали afnetworking на вторичной нити. И от этого вызова [tableView reloadData]; Это даст сбой, так как вы не можете изменить UI из любого другого потока. Вам нужно использовать основной поток. Попробуйте это для этого.

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 
+0

Я ответил первым. и его правильность. По-прежнему не принимайте или +1. у? – Durgaprasad