相关疑难解决方法(0)

iOS/iPhone用户警告重复的NSNotification观察

这不是一个问题,而是警告他人节省一些时间.

iOS 3/iPhone OS 3上的NSNotificationCenter(我还假设Mac OS X和iOS 4)具有以下行为:

如果多次注册自己的确切具体的通知,NSNotificationCenter将认识的冗余和你已注册的观察,而不是将火过许多通知你.

这几乎不是你想要看到的行为,几乎总是偶然的.

例:

我希望我的视图控制器在新数据进入时从单例网络对象接收通知:

- (void) viewDidLoad 
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(newDataArrived:) 
                name:NewDataArrivedNotification
              object:[NetworkListener sharedNetworkListener]];
}
Run Code Online (Sandbox Code Playgroud)

但早些时候我已经把同样的东西放在viewWillAppear:

- (void) viewWillAppear
{
    [super viewWillAppear];

    [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(newDataArrived:)
                name:NewDataArrivedNotification
              object:[NetworkListener sharedNetworkListener]];
}
Run Code Online (Sandbox Code Playgroud)

请注意,它是完全相同的通知,解析为相同的观察者,发件人和通知名称.

在这种情况下,如果我不删除其中一个addObserver调用,我将向我的视图控制器发送重复通知.

在多线程环境中,这是一个受到伤害的世界.相信我.

只是把它放在那里,以防有其他人遇到这样的事情.

iphone macos nsnotifications nsnotificationcenter ios

21
推荐指数
1
解决办法
3508
查看次数