在我用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中可用,我有以下附加信息:
ios - Swift崩溃报告功能签名专长,拥有保证-LMLPHP

最佳答案

我怀疑registeredContacts的评论(我相信是HockeyApp添加的)与此无关
不,我想你是在倒退。这正是相关的。你的事故报告与此无关。
SIGTRAP仅仅意味着我们有一个例外。异常正在代码中抛出(或者更确切地说,在执行代码的过程中)。但你似乎没有得到任何关于它是什么的信息。我的猜测是HockeyApp实际上干扰了你接收真实的报告,这会告诉你异常是什么。
因此,问题就出在retrieveActivities的某个地方。您可以通过计算行数来猜测在哪里(在您的方法中会告诉您崩溃实际发生的行数)。我相信,这可能是像越界数组访问这样简单的事情。因此,一个数组registeredContacts出现在这里这一事实非常具有启发性。在方法的那个点上查找registeredContacts访问。

10-08 07:27
查看更多