代码之家  ›  专栏  ›  技术社区  ›  futureelite7 Adam Rosenfield

是什么导致了这次事故?

  •  1
  • futureelite7 Adam Rosenfield  · 技术社区  · 15 年前

    我最近遇到了一个问题,在使用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 回复  |  直到 15 年前
        1
  •  3
  •   Darren    15 年前

    最有可能的是,NSNotificationCenter试图通知不再存在的对象实例。

    换言之,对象未作为NSNotificationCenter观察者移除自身而被释放。当对象将自身添加为NSNotificationCenter观察者但未能从NSNotificationCenter中删除自身时,请检查代码中的情况。

        2
  •  3
  •   steveax    13 年前

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

        3
  •  0
  •   AndersK    15 年前

    也许是支票 respondsToSelector 然后记录对象的类名等可以帮助您进一步吗?

    推荐文章