我在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中提供了日志,我还有以下信息:
答案 0 :(得分:2)
我怀疑
registeredContacts
评论(我相信HockeyApp添加)与此无关
不,我认为你倒退了。那是完全相关的东西。这是您的崩溃报告无关紧要。
SIGTRAP仅仅意味着我们得到了一个例外。异常是在代码中抛出(或者更确切地说,在执行代码的过程中)。但你似乎没有得到任何关于它是什么的信息。我的猜测是,HockeyApp实际上干扰了您收到真实的报告,该报告会告诉您异常是什么。
因此 retrieveActivities
中存在的问题。您可能会尝试通过计算线来猜测在哪里(您被告知实际发生崩溃的方法中的行数)。我相信它可能就像越界数组访问一样简单。因此,数组registeredContacts
在此处弹出的事实非常具有启发性。在方法中的那一点寻找registeredContacts
访问权限。