NSNotificationDefault Center在添加之前多次调用甚至删除观察者

时间:2013-06-17 12:30:07

标签: iphone cocoa-touch nsnotificationcenter

我正在向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方法。无论何时加载视图都会添加一个观察者,但不会删除观察者。

除此之外我还能做些什么。

2 个答案:

答案 0 :(得分:0)

尝试将其添加到-awakeFromNib中 另外,尝试以不同的方式删除通知。我没有代码,但你必须给它通知的名称,你应该只删除dealloc中的观察者

答案 1 :(得分:0)

您必须在viewWillDisappear方法中删除观察者。

-(void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

并从initWithNibName中删除。