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发布通知时,同样的概念也有效,但这不重要,对吗?
4条答案
按热度按时间t0ybt7op1#
您的一个订阅者已被释放。请确保在您的释放中调用
[[NSNotificationCenter defaultCenter] removeObserver:self]
(如果不是更早的话)。moiiocjp2#
即使在验证dealloc存在之后,也可能发生
EXC_BAD_ACCESS
,如下所示:上面的方法在大多数情况下可以解决这个问题,但显然我的原因是我间接地添加了一个观察者,并将
selector:
设置为nil
,如下所示:...所以当我用
notificationName
发布一些东西时,发生了EXC_BAD_ACCESS
。解决方案是发送一个实际指向某个对象的选择器。
wribegjk3#
我在Swift中也遇到了同样的问题,问题是函数target有一个
closure
参数,参数的默认值是:在我将
closure
参数替换为Notification
参数后,它工作了:我不得不做一些重构,使它以正确的方式工作。
mwngjboj4#
对于任何得到此错误并使用async/await的人,请务必检查此其他问题是否可能不是导致https://stackoverflow.com/a/76066999/2828729的原因。
tl;dr:在编写
@objc
时,选择器和async
方法不能很好地结合在一起