升级到iOS9后loginstream程失败

将应用程序升级到iOS9之后,我的应用程序出现错误,提示:

:objc [344]:无法形成对类LoginVC的实例(0x15919e00)的弱引用。 这个对象可能被过度释放,或者正在被释放。

下面是我得到这个错误的function:

-(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]; } 

该应用程序卡在login屏幕,并不切换到下一个屏幕。

这个错误不在iOS8中。 任何人都可以帮助我解决这个问题。

确保你没有使用被释放的实例。

我有同样的问题。 这不是发生在iOS 8中,而是发生在iOS 9中。因为我像这样覆盖了setDelegate方法。

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

所以在iOS 9中,操作系统将委托设置为无分配,但是我将其设置为self。 所以快速修复是

 -(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]; } } 

最近我遇到了这个问题,这使我得出了我所做的结论。 我上面提供的解决scheme唯一的问题是,如果你需要子类来获得function,即使它的internalDelegate是零,它就是行不通的。

这是我提出的解决scheme,既防止崩溃,并允许function存在,甚至无零InternalDelegate。 如果有人遇到这种情况,我会分享一下。

  1. 创build第二个内部属性,我称之为weakSelf
 @属性(非primefaces,弱)LoginVC * weakSelf;
  1. 在任何初始化方法内部,将weakSelf设置为self
  - (id)init {
     if((self = [super init])){
         self.weakSelf = self;
     }
 }
  1. 更新委托方法
 - (void)setDelegate:(id)delegate {
     _internalDelegate =委托;
     [super setDelegate:self.weakSelf];
 }