Search code examples
iosobjective-ciphoneios9

Login flow failing after upgrading to iOS9


After upgrading my app to iOS9 I’am getting an error in my app which says:

: objc[344]: Cannot form weak reference to instance (0x15919e00) of class LoginVC. It is possible that this object was over-released, or is in the process of deallocation.

Below is the function in which i get this error:

-(void)dismissLogin {
self.isLoggingIn = NO;
[self stopLoginAnimation];
[self dismissViewControllerAnimated:YES completion:NO];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self.appDelegate setLoginVC:nil];
[self.view removeFromSuperview];
//[APPDEL selectTabBar];
}

The app gets stuck at the login screen and doesn't switch to next screens.

This error doesn’t come in iOS8. Can anyone help me with this issue.


Solution

  • Make sure you are not using instance being deallocated.

    I have the same issue. It was not occurring in iOS 8 but occurred in iOS 9. Because I was overriding setDelegate method like this.

    -(void)setDelegate:(id<UICollectionViewDelegate>)delegate{
        _internalDelegate = delegate;
        [super setDelegate:self];
    }
    

    So in iOS 9, OS sets delegate to nil on de-allocation, but I was setting it to self. So quick fix was

    -(void)setDelegate:(id<UICollectionViewDelegate>)delegate{
        _internalDelegate = delegate;
        if (delegate) {
            //Set delegate to self only if original delegate is not nil
            [super setDelegate:self];
        }else{
            [super setDelegate:delegate];
        }
    }