سؤال

لقد تعرضت مؤخراً عن تصادم بشأن عدم العثور على محدد عند نشر إشعار باستخدام 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
هل كانت مفيدة؟

المحلول

على الأرجح يحاول NSNotificationCenter إخطار مثيل كائن لم يعد موجودًا.

وبعبارة أخرى ، تم تعديل الكائن دون إزالة نفسه كمراقب NSNOTificationCenter. تحقق من الكود الخاص بك للحالات عندما يضيف كائن نفسه كمراقب NSNotificationCenter ولكنه يفشل في إزالته من NSNotificalCenter.

نصائح أخرى

يبدو أنك أضفت كائنًا كمراقب لا يستجيب للمحدد الذي قدمته. تأكد من أن طريقة الإخطار الخاصة بك تقبل وسيطة واحدة من النوع NSNotification

ربما شيك إلى respondsToSelector تليها مع بعض قطع تسجيل اسم فئة الكائن وما إلى ذلك يمكن أن تساعدك على مزيد من؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top