1

У меня возникла небольшая проблема с моим приложением. Это простая проблема, но я не могу узнать, в чем причина сбоя.UINavigationcontroller popViewcontroller не работает при второй попытке

У меня есть простой ViewController только с WebView (создан и связан в раскадровке) (с поддержкой ARC):

@implementation BPActivateController 
@synthesize mainWebView; 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 

    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/test.php?code=%@", BASE_URL, [[NSUserDefaults standardUserDefaults] objectForKey:@"uniqueIdentifier"]]]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [mainWebView loadRequest:requestObj]; 

    [super viewDidLoad]; 
} 


- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]; 
    if ([html rangeOfString:@"<h1>Not Found</h1>"].location != NSNotFound) 
    { 
     [self.navigationController popViewControllerAnimated:YES]; 
     NSLog(@"pop the view controller"); 
    } 
} 

- (void)viewDidUnload 
{ 
    [self setMainWebView:nil]; 
    [super viewDidUnload]; 
} 

Первый раз вид открывает popViewControllerAnimated называется, и пользователь перенаправляется обратно в последний диспетчер представлений. Но когда представление открывается снова, выдает мне EXEC_BAD_ACCESS после вызова popViewControllerAnimated. Когда я включить код Zombie дает мне след:

2012-06-04 11:51:12.717 actusmedicus[410:707] pop the view controller 
2012-06-04 11:51:12.720 actusmedicus[410:707] *** -[BPActivateController respondsToSelector:]: message sent to deallocated instance 0xc6d95b0 

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

У кого-нибудь есть идея, которая возвращает меня в нужное русло?


[EDIT]

EXEC_BAD_ACCESS фиксируется путем установки делегата WebView к нулю. Но реальная проблема все еще существует, при первом просмотре представления в стеке UINavigation веб-просмотр загружается, а после 404 успешно выполняется popViewControllerAnimated. Но во второй раз мы нажимаем один и тот же взгляд на стек UINavigation (так же, как и в первый раз). PopViewControllerAnimated ничего не делает. Я проверил, нет ли этого, но это не проблема.

Моя первая идея заключалась в том, что она работает в другом потоке, и UINavigationcontroller там не существует. Я исключил эту возможность с помощью performSelectorOnMainThread.

Наконец, я добавил кнопку вызова popViewControllerAnimated вручную, и это работает каждый раз, так почему же это не работает, когда я называю это программным путем?

ответ

0

Я подозреваю, что WebView еще занят ..

Если да, то в вашем dealloc вызвать метод stopLoading.

Вы также должны установить делегат на нуль в dealloc.

+0

Я пробовал метод stopLoading перед вызовом popViewControllerAnimated, но проблема все еще там. Проект ARC, поэтому мне не нужно вызывать dealloc –

+0

, устанавливая delgate на nil, исправляет сообщение BAD_ACCESS, но реальная проблема по-прежнему есть идеи? –

0

Убедитесь, что вы дважды не переходите к контроллеру режима назначения. В моем случае мой код дважды выстрелил в седж. Поэтому мне пришлось дважды нажать кнопку «Назад», чтобы вернуться к моему основному контроллеру.

Смежные вопросы