Это самая странная проблема, с которой я застрял.
У меня есть UIViewController в UINavigationController, и я хочу вызвать метод в viewDidAppear с помощью NSInvocationOperation, чтобы он мог работать в обратном потоке, когдавид становится видимым.
Проблема заключается в том, что если вынуть контроллер представления ДО , то операция (в данном случае метод testMethod ) завершится, приложение аварийно завершит работу.
Все работает нормально, если я выскакиваю контроллер вида ПОСЛЕ операция идет своим чередом.
Когда приложение аварийно завершает работу, оно останавливается в [super dealloc] с «EXC-BAD-ACCESS» и выдает мне следующую ошибку:
bool _WebTryThreadLock (bool), xxxxxxxxx:Попытка получить веб-блокировку из потока, отличного от основного потока или веб-потока.Это может быть результатом обращения к UIKit из вторичного потока.Сбой сейчас ...
И это мой код (супер упрощенный) ..
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSInvocationOperation *theOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(testMethod) object:nil];
[operationQueue addOperation:theOperation];
[theOperation release];
}
- (void)testMethod
{
NSLog(@"do some stuff that takes a few seconds to complete");
}
- (void)dealloc
{
[_tableView release];
[super dealloc];
}
testMethod имеет некоторый код, который занимает несколько секундзавершить.У меня есть только несколько подсказок, и я действительно не знаю, как и где начать отлаживать это.
Подсказка # 1: Самое смешное, что если я удалю [_tableView release];от dealloc, то приложение не падает.Но, конечно, это может вызвать утечку, и я не могу ее устранить.
Подсказка # 2: я тестировал этот код на отдельном "чистом" UIViewController с UITableView имое удивление, что не аварийно завершился.
Подсказка # 3: Приложение не аварийно завершает работу, если для источника данных UITableView установлено значение nil в viewDidLoad.
Подсказка # 4: приложение не выглядит сбой, если я использую тот же код в viewDidAppear где-то еще, как IBAction.
Подсказка # 5:Я пытался просматривать данные стека с помощью NSZombie, но он дает мне тонны данных и ни к чему не приводит.
У меня есть очень сложный код в моих UITableViewDelegate и UITableViewDataSource, и я действительно не понимаюне знаю, с чего начать отладку этого.Я действительно надеюсь, что мне не придется проходить построчно или переписывать все это из-за этого.
Есть какие-нибудь указатели на то, куда я должен смотреть?