UIViewController
は自身をデフォルトのセンターに追加します:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(editFood)
name:@"editFood"
object:nil];
次に、UITableView
デリゲートNSObjectがNSNotification
をポストします。
[[NSNotificationCenter defaultCenter]
postNotificationName:@"editFood"
object:self];
実行中にEXC_BAD_ACCESS例外を受け取ります。
defaultCenter
はどこかでリリースされますか? UIViewControllerからUIViewControllerに通知を投稿するときに同じ概念が機能しますが、それは問題ではないでしょうか?
サブスクライバーの1つが割り当て解除されました。 deallocで[[NSNotificationCenter defaultCenter] removeObserver:self]
を呼び出してください(そうでない場合)。
EXC_BAD_ACCESS
は、deallocが次のように存在することを確認した後でも発生する可能性があります。
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]
}
上記はほとんどの場合問題を解決しますが、明らかに私の原因は、selector:
次のようにnil
に設定します。
[NSNotificationCenter.defaultCenter addObserver:self
selector:nil
name:notificationName
object:nil];
...そのため、notificationName
、EXC_BAD_ACCESS
発生した。
解決策は、実際に何かを指すセレクターを送信することでした。