2010-11-19 135 views
1

我最近发生了一个崩溃,关于使用NSNotificationCenter发布通知时找不到选择器。什么可能导致这个错误?什么可能导致这次崩溃?

我注意到,在通知发布后没有用户代码被调用,所以在通知的接收端似乎没有问题。但是,什么可能导致NSNotificationCenter崩溃?

这里是调用的堆栈跟踪:

0 libSystem.B.dylib    0x00078ac8 __kill + 8 
1 libSystem.B.dylib    0x00078ab8 kill + 4 
2 libSystem.B.dylib    0x00078aaa raise + 10 
3 libSystem.B.dylib    0x0008d03a abort + 50 
4 libstdc++.6.dylib    0x00044a20 __gnu_cxx::__verbose_terminate_handler() + 376 
5 libobjc.A.dylib     0x00005958 _objc_terminate + 104 
6 libstdc++.6.dylib    0x00042df2 __cxxabiv1::__terminate(void (*)()) + 46 
7 libstdc++.6.dylib    0x00042e46 std::terminate() + 10 
8 libstdc++.6.dylib    0x00042f16 __cxa_throw + 78 
9 libobjc.A.dylib     0x00004838 objc_exception_throw + 64 
10 CoreFoundation     0x000a167c -[NSObject(NSObject) doesNotRecognizeSelector:] + 96 
11 CoreFoundation     0x000491d2 ___forwarding___ + 502 
12 CoreFoundation     0x00048f88 _CF_forwarding_prep_0 + 40 
13 Foundation      0x000146ac _nsnote_callback + 136 
14 CoreFoundation     0x0002670c __CFXNotificationPost_old + 396 
15 CoreFoundation     0x000263ac _CFXNotificationPostNotification + 112 
16 Foundation      0x0000b014 -[NSNotificationCenter postNotification:] + 132 
17 [My Application]    0x000a5ad2 -[PortfolioUpdateOperation main] (PortfolioUpdateOperation.m:37) 
18 Foundation      0x0000e9e8 -[__NSOperationInternal start] + 652 
19 Foundation      0x0000e74c -[NSOperation start] + 16 
20 Foundation      0x00023574 ____startOperations_block_invoke_2 + 40 
21 libSystem.B.dylib    0x000d597c _dispatch_call_block_and_release + 12 
22 libSystem.B.dylib    0x000d675c _dispatch_worker_thread2 + 120 
23 libSystem.B.dylib    0x0007a67a _pthread_wqthread + 258 
24 libSystem.B.dylib    0x00073190 start_wqthread + 0 
+0

10 CoreFoundation 0x000a167c - [NSObject(NSObject)doesNotRecognizeSelector:] + 96 --- 看起来你正在传递一些它没有响应的东西。 – 2010-11-19 02:47:04

回答

3

很可能NSNotificationCenter试图通知不再存在的对象实例。

换句话说,一个对象被解除分配而没有将自己作为NSNotificationCenter观察者移除。当一个对象将自己添加为NSNotificationCenter观察者但未能从NSNotificationCenter中删除自己时,请检查您的代码。

+0

这听起来像一个好开始。 – futureelite7 2010-11-19 07:57:44

0

也许检查respondsToSelector随后与对象的类名等的一些记录可能会进一步帮助你吗?

3

看起来像您添加了一个对象作为观察者,不响应您提供的选择器。确保你的通知方法接受一个类型的参数NSNotification