我的应用程序遇到了一些问题。这是一个简单的问题,但我无法找出崩溃的原因。
我有一个简单的viewcontroller,只有一个webview(在storyboard中创建和链接)(启用了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并且每次都有效,所以当我以编程方式调用它时为什么它不起作用?
答案 0 :(得分:0)
我怀疑webview仍然很忙..
如果是这样,那么在你的dealloc中调用stopLoading方法。
您还应该在dealloc中将委托设置为nil。
答案 1 :(得分:0)
确保您没有两次到目标视图控制器。就我而言,我的代码两次触发了segue。因此,我必须单击两次后退按钮才能返回主控制器。