How to safely shut down a loading UIWebView in viewWillDisappear?

前端 未结 6 1217
温柔的废话
温柔的废话 2020-12-07 11:34

I have a view containing a UIWebView which is loading a google map (so lots of javascript etc). The problem I have is that if the user hits the \'back\' button on the nav ba

6条回答
  •  执念已碎
    2020-12-07 11:51

    Possibly related, I sometimes (again totally intermittent) get an ugly heisenbug where clicking the back button on some other view's navbar will pop the title, but not the view. In other words I get left with the title of view n on the stack, but the view showing is still view n+1 (the result is you're trapped on this screen and cannot get back to the root view - you can go the other direction, i.e. push more views and pop back to the view that didn't pop corrrectly, just not to the root view. The only way out is to quit the app). At other times the same sequence of pushes and pops on the same views works fine.

    I have the same problem, when I'm use navigation controller with view controllers in stack > 2 and current view controller index > 2, if an memoryWarning occurs in this momens, it raises the same problems.

    There is inly 1 solution, which I found after many experiments with overriding pop and push methods in NavigationController, with the stack of view controllers, with views and superviews for stacked ViewControllers, etc.

    #import 
    #import 
    
    @interface FixedNavigationController : 
    UINavigationController {
    
    }
    
    @end
    

    #import "FixedNavigationController.h"
    
    static BOOL bugDetected = NO;
    
    @implementation FixedNavigationController
    
    - (void)viewDidLoad{
        [self setDelegate:self];
    }
    
    - (void)didReceiveMemoryWarning{
        // FIX navigationController & memory warning bug
        if([self.viewControllers count] > 2)
            bugDetected = YES;
    }
    
    - (void)navigationController:(UINavigationController *)navigationController 
    didShowViewController:(UIViewController *)viewController 
    animated:(BOOL)animated
    {
    
        // FIX navigationController & memory warning bug
        if(bugDetected){
            bugDetected = NO;
    
            if(viewController == [self.viewControllers objectAtIndex:1]){
                [self popToRootViewControllerAnimated:NO];
                self.viewControllers = [self.viewControllers arrayByAddingObject:viewController];
            }
        }
    }
    
    @end
    

    It works fine for 3 view controllers in stack.

提交回复
热议问题