0

在我的应用程序中,我有一些 VC 需要从我的模型接收 NSNotifications,这是异步获取数据的。问题是 VC 不时消失,当模型完成获取数据并尝试向已经消失的 VC 发送通知时,应用程序崩溃。是否有防止这种崩溃的选项?就像告诉 NSNotificationCenter “如果观察者不在那里也没关系”?

:)

// Subscribe for notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(finishedLoading) name:@"Finished Loading" object:nil];

// Model sends a notification to a subscribed VC
[[NSNotificationCenter defaultCenter] postNotificationName:@"Finished Loading" object:nil userInfo:nil];
4

4 回答 4

2

苹果文档

确保在 notifyObserver 或 addObserver:selector:name:object: 中指定的任何对象被释放之前调用此方法(removeObserver: 或 removeObserver:name:object:)。

将 removeObserver 调用添加到观察者的 dealloc。

- (void)dealloc{
...
[[NSNotificationCenter defaultCenter] removeObserver:self ];
...
}
于 2013-09-23T14:47:35.247 回答
1

我想,你只需要这样做:

[[NSNotificationCenter defaultCenter] removeObserver:self ];
于 2013-09-23T14:45:12.027 回答
1

NSNotificationCenter removeObserver...每次打电话都必须打电话addObserver...。这通常在dealloc方法中完成。

于 2013-09-23T14:45:24.687 回答
0

老实说,通过这种方法,您是在减轻症状而不是治愈疾病。

如果您使用异步网络库(例如 AFNetworking)来返回NSOperation实例,那么您最好在NSOperationQueue. 然后,当您的控制器被弹出时,在该viewWillDisappear方法中,取消所有未完成的异步请求:

[myOpQueue cancelAllOperations];
于 2013-09-23T14:50:06.427 回答