我正在向init方法添加观察者。因为它不会多次调用我在删除它之前删除了观察者。即使是在我们加载View时调用了多次。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateStuff)
name:@"appDidBecomeActive"
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(closeConnection)
name:@"appDidEnterBackground"
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanges:)
name:@"UIDeviceOrientationDidChangeNotification"
object:nil];
t=[[Theme alloc] init];
// Custom initialization
}
return self;
}
我也尝试过在updateStuff方法中删除
-(void)updateStuff
{
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
NSLog(@"Market Watch update stuff called $$$$$$$----------------------");
[self initNetworkCommunication];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
也尝试删除。
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"appDidBecomeActive" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"appDidEnterBackground" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}
还尝试在viewWillDisappear中删除它工作正常,但这里添加观察者到viewWillAppear不工作。
当我锁定屏幕并解锁时,这个观察者应该调用。因为它在appDidBecomeActive上被通知,它就是这样工作的。但是当我弹回到之前的viewController并推送到当前的一个并重复锁定和解锁的过程时,这个观察者会触发两次。随着次数我弹出视图并再次推送到当前View.Notifier激发次数我推到了View.I知道这是因为init方法。无论何时加载视图都会添加一个观察者,但不会删除观察者。
除此之外我还能做些什么。
答案 0 :(得分:0)
尝试将其添加到-awakeFromNib中 另外,尝试以不同的方式删除通知。我没有代码,但你必须给它通知的名称,你应该只删除dealloc中的观察者
答案 1 :(得分:0)
您必须在viewWillDisappear方法中删除观察者。
-(void)viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
并从initWithNibName中删除。