【问题标题】:UINavigationcontroller popViewcontroller does not work at second tryUINavigationcontroller popViewcontroller 在第二次尝试时不起作用
【发布时间】:2013-07-06 21:36:34
【问题描述】:

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

我有一个简单的视图控制器,只有一个 web 视图(在情节提要中创建和链接)(启用了 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 并将用户重定向回最后一个视图控制器。但是当视图再次打开时,在调用 popViewControllerAnimated 后给了我一个 EXEC_BAD_ACCESS。当我启用僵尸代码给我以下跟踪:

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 仍然很忙..

谁有让我重回正轨的想法?


[编辑]

EXEC_BAD_ACCESS 通过将 webview 的委托设置为 nil 来修复。 但真正的问题仍然存在,第一次将视图推送到 UINavigation 堆栈时,Web 视图确实加载,并且在 404 之后 popViewControllerAnimated 成功执行。但是第二次我们在 UINavigation 堆栈上推送相同的视图(与我们第一次做的方式相同)popViewControllerAnimated 没有做任何事情。我检查了它是否为零,但这似乎不是问题..

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

最后我添加了一个按钮来手动调用 popViewControllerAnimated 并且每次都有效,那么为什么我以编程方式调用它时它不起作用?

【问题讨论】:

    标签: ios uinavigationcontroller popviewcontrolleranimated


    【解决方案1】:

    我怀疑 webview 仍然很忙..

    如果是这样,那么在你的 dealloc 中调用 stopLoading 方法。

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

    【讨论】:

    • 我在调用popViewControllerAnimated之前尝试了stopLoading方法,但问题仍然存在..项目是ARC所以我不必调用dealloc
    • 将 delgate 设置为 nil 可修复 BAD_ACCESS 消息,但真正的问题仍然存在,有什么想法吗?
    【解决方案2】:

    确保您没有连续两次到目标视图控制器。就我而言,我的代码两次触发了 segue。所以我必须点击两次返回按钮才能回到我的主控制器。

    【讨论】:

      猜你喜欢
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      相关资源
      最近更新 更多