popViewControllerAnimated

popViewControllerAnimated

我的应用遇到了一些问题。这是一个简单的问题,但我无法找出导致崩溃的原因。

我有一个简单的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,并将用户重定向回最后一个viewcontroller。但是,当再次打开视图时,在调用popViewControllerAnimated之后给我EXEC_BAD_ACCESS。当我启用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


我已经尝试了几件事,但仍不清楚被称为选择器。我怀疑webview仍然很忙。

任何人都有让我回到正轨的想法吗?



[编辑]

通过将Webview的委托设置为nil,可以固定EXEC_BAD_ACCESS。
但是真正的问题仍然存在,第一次将视图推入UINavigation堆栈时,Web视图确实加载,并且在404之后成功执行popViewControllerAnimated。但是第二次我们将相同的视图推送到UINavigation堆栈上(与第一次相同),popViewControllerAnimated不会执行任何操作。我检查了是否为零,但这似乎不是问题。

我的第一个想法是,它在另一个线程中运行,而UINavigationcontroller在那里不存在。我借助performSelectorOnMainThread排除了这种可能性。

最终,我添加了一个手动调用popViewControllerAnimated的按钮,该按钮每次都有效,所以为什么当我以编程方式调用它时却不起作用?

最佳答案

我怀疑webview仍然很忙。
  


如果是这样,则在您的dealloc中调用stopLoading方法。

您还应该在dealloc中将委托设置为nil。

10-08 07:31