- [NSNotificationCenter addObserver:selector:name:object:] _ block_invoke crash

时间:2013-12-25 19:43:28

标签: ios objective-c nsnotificationcenter

我在iOS应用程序中找到此崩溃的来源时遇到问题,该应用程序具有使用iCloud存储用户搜索历史记录和用户收藏夹的核心数据模型。按下主页按钮然后重新启动应用程序后应用程序崩溃。我没有在第一次使用时发生,但通常是应用程序启动的第四或第五次。

回溯如下:

* thread #1: tid = 0xea2b, 0x02e5c88a libobjc.A.dylib`objc_exception_throw, queue =     'com.apple.main-thread, stop reason = breakpoint 1.1
frame #0: 0x02e5c88a libobjc.A.dylib`objc_exception_throw
frame #1: 0x03225903 CoreFoundation`-[NSObject(NSObject) doesNotRecognizeSelector:] + 275
frame #2: 0x0317890b CoreFoundation`___forwarding___ + 1019
frame #3: 0x031784ee CoreFoundation`_CF_forwarding_prep_0 + 14
frame #4: 0x011a3bf9 Foundation`__57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke + 40
frame #5: 0x031e4524 CoreFoundation`__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 20
frame #6: 0x0313c00b CoreFoundation`_CFXNotificationPost + 2859
frame #7: 0x010dd951 Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:] + 98
frame #8: 0x014dacb8 UIKit`-[UIApplication _deactivateForReason:notify:] + 370
frame #9: 0x014dada6 UIKit`-[UIApplication _deactivateForReason:] + 48
frame #10: 0x014e7e14 UIKit`-[UIApplication _handleApplicationSuspend:eventInfo:] + 354
frame #11: 0x014f4a45 UIKit`-[UIApplication handleEvent:withNewEvent:] + 3904
frame #12: 0x014f4de9 UIKit`-[UIApplication sendEvent:] + 85
frame #13: 0x014e2025 UIKit`_UIApplicationHandleEvent + 736
frame #14: 0x040a62f6 GraphicsServices`_PurpleEventCallback + 776
frame #15: 0x040a5e01 GraphicsServices`PurpleEventCallback + 46
frame #16: 0x03103d65 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
frame #17: 0x03103a9b CoreFoundation`__CFRunLoopDoSource1 + 523
frame #18: 0x0312e77c CoreFoundation`__CFRunLoopRun + 2156
frame #19: 0x0312dac3 CoreFoundation`CFRunLoopRunSpecific + 467
frame #20: 0x0312d8db CoreFoundation`CFRunLoopRunInMode + 123
frame #21: 0x040a49e2 GraphicsServices`GSEventRunModal + 192
frame #22: 0x040a4809 GraphicsServices`GSEventRun + 104
frame #23: 0x014e1d3b UIKit`UIApplicationMain + 1225
frame #24: 0x0000214d MBSSearch`main(argc=1, argv=0xbfffeed8) + 141 at main.m:15

我添加了带有调试器命令-[NSNotificationCenter addObserver:selector:name:object:]的符号断点PO,但在调试输出中获得了大量无用的iCloud数据,如下所示:

 2013-12-25 10:06:48.338 MyApp[1543:350f] -[PFUbiquityTransactionLog loadContents:](345): CoreData: Ubiquity:  Error encountered while trying to load the comparison metadata for transaction log: <PFUbiquityTransactionLog: 0xf365da0>
transactionLogLocation: <PFUbiquityLocation: 0xb62e990>: /Users/me/Library/Application Support/iPhone Simulator/7.0.3-64/Library/Mobile Documents/WS9VY4R2C6~com~me~myapp/data/me~simF624C941-DBCF-57CE-98C0-0DC98418B1E4/Appstore/~qmbb44VcI_8d7OJMA6dsq8P47PO1E4pQCb7q5bp3JA=/5E401B20-4502-4E53-9B76-415122EE8882.1.cdt
transactionNumber: (null)



 Error: Error Domain=NSCocoaErrorDomain Code=134302 "The operation couldn’t be completed. (Cocoa error 134302.)" UserInfo=0xb642ca0 {reason=Error reading the log file at location: (null)
userInfo: (null)}
userInfo: {
    reason = "Error reading the log file at location: (null)\nuserInfo: (null)";

关于追踪事故原因的任何想法?

编辑:我也尝试使用乐器寻找NSZombies,并且可以在没有僵尸错误的情况下重现崩溃

EDIT2:此链接非常有用:http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1

1 个答案:

答案 0 :(得分:0)

你是什么意思

  

我添加了一个符号断点 - [NSNotificationCenter   addObserver:selector:name:object:],带有调试器命令PO

您不使用PO命令添加符号断点。添加符号断点的最简单方法是在Xcode中使用断点导航器。您还可以在LLDB命令行中查找断点命令,但这些命令有点难以理解。

对于您的崩溃,您似乎已为暂停事件设置了通知中心通知。你是否添加了任何通知管理员观察员?或者您使用的是第三方图书馆吗?您可能有第三方库正在添加您不知道的通知。