Objective c N通知中心不工作,我做错了什么?
我正在使用cocos3D(但这并不重要……) 在GameLogic中,我有一个简单的通知处理程序(也在标题中声明) 在MyObject中,当时间到了,我调用这个方法Objective c N通知中心不工作,我做错了什么?,objective-c,xcode,exc-bad-access,nsnotificationcenter,Objective C,Xcode,Exc Bad Access,Nsnotificationcenter,我正在使用cocos3D(但这并不重要……) 在GameLogic中,我有一个简单的通知处理程序(也在标题中声明) 在MyObject中,当时间到了,我调用这个方法 -(void)dispatchEvent { NSLog(@"SHOULD DISPATCH THE EVENT"); [[NSNotificationCenter defaultCenter] postNotificationName:@"objectMoved" object:self]; NSLog(@
-(void)dispatchEvent
{
NSLog(@"SHOULD DISPATCH THE EVENT");
[[NSNotificationCenter defaultCenter] postNotificationName:@"objectMoved" object:self];
NSLog(@"EVENT DISPATCHED");
}
但它在突出显示postNotificationName行时崩溃。。。
错误是EXC_BAD_ACCESS,意思是(如果我理解正确的话)有一些对解除分配对象的引用
发生了什么?似乎您有两个或多个
MyObject
实例,一个是在initializeScene中创建的,另一个是发布通知的。将nil
作为对象参数传递应该有效:
[[NSNotificationCenter defaultCenter] addObserver:gLogic
selector:@selector(testHandler:)
name:@"objectMoved"
object:nil];
最可能的原因是您实际上没有调用addObserver:selector:name:object:
。那里没有测井线;您确定代码正在运行吗
第二个最可能的原因是您在发布通知之前调用removeObserver:。这在dealloc中最为常见(如果您观察到任何情况,应该始终调用removeObserver
)。这里的错误是,您的观察对象在通知之前已解除分配
在这里,您的代码对象没有在MyScene上的addObserver
注释addObserver
行中正确设置,方法dispatchEvent
一直执行到结束,没有任何错误,一切仍然正常。。。(除了testHandler:
显然被忽略)我仍然收到相同的错误。。我尝试在addOserver
上使用nil
,postNotificationName
和这两个(在object
参数上),但仍然不起作用可能您的观察者(MyScene
实例)已被释放。确保在dealoc
过程中将其作为观察者删除。即使我在dealoc
方法上注释或取消注释removeObserver
,我仍然会收到错误。。。无论如何,我不确定你在说什么:为什么«对象设置不正确»?为什么我«没有实际调用addObserver…»[[NSNotificationCenter defaultCenter]addObserver:gLogic选择器:@selector(testHandler:)name:@“objectMoved”对象:nil];将其添加到ViewDidLoad方法中
-(void)dispatchEvent
{
NSLog(@"SHOULD DISPATCH THE EVENT");
[[NSNotificationCenter defaultCenter] postNotificationName:@"objectMoved" object:self];
NSLog(@"EVENT DISPATCHED");
}
[[NSNotificationCenter defaultCenter] addObserver:gLogic
selector:@selector(testHandler:)
name:@"objectMoved"
object:nil];