NSNotification叫了两次

时间:2014-04-04 23:36:30

标签: ios iphone objective-c

我正在使用此代码来实现NSNotification侦听器:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addUserItemNotification:) name:kFinishFillUserDetails object:nil];
    }
    return self;
}

我如何删除它:

-(void)viewDidUnload {
    [super viewDidUnload];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:kFinishFillUserDetails object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

这就是我所说的:

[[NSNotificationCenter defaultCenter] postNotificationName:kFinishFillUserDetails object:nil userInfo:dic];

我有这个问题:

如果我创建了viewcontroller并将其添加到UINavigationController然后从UINavigationController中删除它,然后创建另一个相同类型的控制器并将其添加到UINavigationController,然后NSNotification两次召唤,不仅一次。 知道为什么会这样吗?

这是我创建UIViewController

的方式
UsersViewController *usersVC = [[[UsersViewController alloc]initWithNibName:@"UsersViewController" bundle:nil] autorelease];
[[self navigationController] pushViewController:usersVC animated:NO];

2 个答案:

答案 0 :(得分:1)

从iOS 6开始,

viewDidUnload已被弃用,在视图控制器生命周期中不再调用它。

尝试将注销代码移至dealloc

答案 1 :(得分:0)

Gabriele Petronella有权利。不推荐使用viewDidUnload。我发现注册/取消注册NSNotifications时使用的最佳模式分别位于viewWillAppear:animated / viewWillDisappear:animated中。