升级到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。 如果有人遇到这种情况,我会分享一下。
- 创build第二个内部属性,我称之为weakSelf
@属性(非primefaces,弱)LoginVC * weakSelf;
- 在任何初始化方法内部,将weakSelf设置为self
- (id)init { if((self = [super init])){ self.weakSelf = self; } }
- 更新委托方法
- (void)setDelegate:(id)delegate { _internalDelegate =委托; [super setDelegate:self.weakSelf]; }