在我用Swift重写了一些Objective-C代码之后,我的一些用户开始崩溃。当链接到Xcode时,我根本无法复制,我也无法理解为什么只有少数用户会崩溃。我从HockeyApp中检索到日志,原因是:Selector name found in current argument registers: registeredContacts
。这是一个数组,我正在处理我的代码,但在任何情况下,我都不能让它在访问或设置该数组时崩溃。
我认为这可能是我的Swift块语法,以及我如何从Objective-C调用它。我的Swift函数签名:func retrieveActivities(handler: (([WPActivity], Error?) -> Void)?) {
我在Objective-C中称之为:[[WPActivitiesManager shared] retrieveActivitiesWithHandler:nil];
有时我确实使用块,但在启动时我不需要它。如我所说,这不会为我崩溃,也没有编译器警告。
我崩溃日志的顶部:
Exception Type: SIGTRAP
Exception Codes: #0 at 0x1001c0438
Crashed Thread: 0
Application Specific Information:
Selector name found in current argument registers: registeredContacts
Thread 0 Crashed:
0 Waypoint 0x00000001001c0438 function signature specialization <Arg[0] = Owned To Guaranteed, Arg[1] = Owned To Guaranteed> of Waypoint.WPActivitiesManager.(retrieveActivities (handler : ([__ObjC.WPActivity], Swift.Error?) -> ()?) -> ()).(closure #2) with unmangled suffix "_merged" + 612
1 Waypoint 0x00000001001c13a4 partial apply forwarder for Waypoint.WPActivitiesManager.(retrieveActivities (handler : ([__ObjC.WPActivity], Swift.Error?) -> ()?) -> ()).(closure #2) with unmangled suffix "_merged" + 64
2 Foundation 0x0000000189ca2754 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 12
3 Foundation 0x0000000189be72c8 -[NSBlockOperation main] + 92
4 Foundation 0x0000000189bd78c4 -[__NSOperationInternal _start:] + 616
5 Foundation 0x0000000189ca4b00 __NSOQSchedule_f + 224
6 libdispatch.dylib 0x00000001880691c0 _dispatch_client_callout + 12
7 libdispatch.dylib 0x000000018806dd6c _dispatch_main_queue_callback_4CF + 996
8 CoreFoundation 0x000000018918bf2c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
9 CoreFoundation 0x0000000189189b18 __CFRunLoopRun + 1656
10 CoreFoundation 0x00000001890b8048 CFRunLoopRunSpecific + 440
11 GraphicsServices 0x000000018ab3e198 GSEventRunModal + 176
12 UIKit 0x000000018f0a42fc -[UIApplication _run] + 680
13 UIKit 0x000000018f09f034 UIApplicationMain + 204
14 Waypoint 0x0000000100122888 main (main.m:14)
15 libdyld.dylib 0x000000018809c5b8 start + 0
我怀疑
registeredContacts
评论(我相信是HockeyApp添加的)与此无关,但这是一个ObjC/Swift问题。任何想法都值得欣赏。日志最终在Xcode中可用,我有以下附加信息:
最佳答案
我怀疑registeredContacts
的评论(我相信是HockeyApp添加的)与此无关
不,我想你是在倒退。这正是相关的。你的事故报告与此无关。
SIGTRAP仅仅意味着我们有一个例外。异常正在代码中抛出(或者更确切地说,在执行代码的过程中)。但你似乎没有得到任何关于它是什么的信息。我的猜测是HockeyApp实际上干扰了你接收真实的报告,这会告诉你异常是什么。
因此,问题就出在retrieveActivities
的某个地方。您可以通过计算行数来猜测在哪里(在您的方法中会告诉您崩溃实际发生的行数)。我相信,这可能是像越界数组访问这样简单的事情。因此,一个数组registeredContacts
出现在这里这一事实非常具有启发性。在方法的那个点上查找registeredContacts
访问。