Что может быть причиной этого сбоя? - PullRequest
1 голос
/ 19 ноября 2010

Недавно у меня произошел сбой, связанный с тем, что селектор не был обнаружен при публикации уведомления с помощью 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

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

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

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

3 голосов
/ 10 октября 2012

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

0 голосов
/ 19 ноября 2010

Может быть, проверка на respondsToSelector с последующей регистрацией имени класса объекта и т. Д. Может помочь вам в дальнейшем?

...