2010-11-19 3 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 --- Кажется, вы передаете это то, что он не отвечает на. –

ответ

3

Скорее всего, NSNotificationCenter пытается уведомить экземпляр объекта, который больше не существует.

Другими словами, объект был освобожден без удаления в качестве наблюдателя NSNotificationCenter. Проверьте код на случаи, когда объект добавляет себя в качестве наблюдателя NSNotificationCenter, но не удаляет себя из NSNotificationCenter.

+0

Это похоже на хорошее начало. – futureelite7

0

Может быть проверка на respondsToSelector следует с некоторой протоколирования имя класса объекта и т.д. может помочь вам в дальнейшем?

3

Похоже, вы добавили объект в качестве наблюдателя, который не отвечает на выбранный вами селектор. Убедитесь, что ваш метод уведомления принимает один аргумент типа NSNotification

Смежные вопросы