;没有僵尸活动
编辑:我已经确定下面发生只有在iPad的视网膜模拟器和我的iPad迷你3测试设备。它会在这些目标上发生100%的时间,而不会出现在任何其他iPad或iPhone模拟器(iPad Air/Air 2; iPad Pro; iPhone 5至7 Plus)上。我没有任何其他设备进行测试。;没有僵尸活动
我有写入夫特一个应用程序,显示一个UITableView
其中我添加了一个UILongPressGestureRecognizer
给每个小区内的自定义视图。该应用程序运行良好,直到我长按某一行上,在该点处的应用程序与
线程1停止:EXC_BAD_ACCESS(码= 1,地址= 0xd08600b6)
(地址变化很大并且看起来非常随机,有时它是0x0)。当崩溃发生时,调试控制台中不会显示任何输出。 XCode本身打开到我的应用程序委托的类声明的第一行。
我在我的长按事件处理程序方法的第一行放置了一个断点,但应用程序在命中断点之前崩溃了。我还添加了一个异常断点,但它也没有发现问题。
我已经在计划中启用了僵尸对象,但没有显示出来。我试过使用Instruments和僵尸模板来运行应用程序;该应用只是停止,乐器不会标记任何僵尸活动。 XCode的分析报告没有问题。
我不知道它是如何相关的,但是自从我第一次存档应用程序以准备分发给测试人员以来,这个问题是新的。在此之前,该应用程序在模拟器和测试设备上完美无缺地工作。首次在设备上安装并运行分发.ipa文件时,问题首次显现。然后我回到模拟器并发现相同的行为。我已经清理了该项目,清理了构建文件夹,重新启动了我的开发机器,并完成了我所能想到的以纯粹状态运行的所有内容。没有不同。
我不知道如何在追踪这个过程中取得进展。任何建议将不胜感激。
更多信息
看来,崩溃的是,传递给UILongPressGestureRecognizer
初始化的#selector
对象内发生的事情。下面是从调试导航窗格中的调用堆栈:
#0 0x006e7295在objc_retain()
#1 0x0007529f在@objc TikkunRowView。onLongPress(发件人:UILongPressGestureRecognizer,forEvent:的UIEvent) - >()()
#2 0x01cc6d3b在 - [UIGestureRecognizerTarget _sendActionWithGestureRecognizer:]()
#3 0x01ccf75e在_UIGestureRecognizerSendTargetActions()
#4 0x01cccdee在_UIGestureRecognizerSendActions()
#5 0x01ccbca8在 - [UIGestureRecognizer _updateGestureWithEvent:buttonEvent:]()
#6 0x01cb6670在_UIGestureEnvironmentUpdate()
而这里的在#1上面的代码,其中发生崩溃(所述calll
在偏移< +42 >):
Tikkun Sample`@objc TikkunRowView.onLongPress(sender : UILongPressGestureRecognizer, forEvent : UIEvent) ->():
0x60270 <+0>: pushl %ebp
0x60271 <+1>: movl %esp, %ebp
0x60273 <+3>: pushl %esi
0x60274 <+4>: subl $0x24, %esp
0x60277 <+7>: movl 0x14(%ebp), %eax
0x6027a <+10>: movl 0x10(%ebp), %ecx
0x6027d <+13>: movl 0x8(%ebp), %edx
0x60280 <+16>: movl %ecx, (%esp)
0x60283 <+19>: movl %ecx, -0x8(%ebp)
0x60286 <+22>: movl %edx, -0xc(%ebp)
0x60289 <+25>: movl %eax, -0x10(%ebp)
0x6028c <+28>: calll 0x7c9ec ; symbol stub for: objc_retain
0x60291 <+33>: movl -0x10(%ebp), %ecx
0x60294 <+36>: movl %ecx, (%esp)
0x60297 <+39>: movl %eax, -0x14(%ebp)
0x6029a <+42>: calll 0x7c9ec ; symbol stub for: objc_retain
>> 0x6029f <+47>: movl -0xc(%ebp), %ecx << CRASH HAPPENS WITH THIS LINE HIGHLIGHTED
0x602a2 <+50>: movl %ecx, (%esp)
0x602a5 <+53>: movl %eax, -0x18(%ebp)
0x602a8 <+56>: calll 0x7c9ec ; symbol stub for: objc_retain
0x602ad <+61>: movl -0x8(%ebp), %ecx
0x602b0 <+64>: movl %ecx, (%esp)
0x602b3 <+67>: movl -0x10(%ebp), %edx
0x602b6 <+70>: movl %edx, 0x4(%esp)
0x602ba <+74>: movl -0xc(%ebp), %esi
0x602bd <+77>: movl %esi, 0x8(%esp)
0x602c1 <+81>: movl %eax, -0x1c(%ebp)
0x602c4 <+84>: calll 0x5fd40 ; Tikkun_Sample.TikkunRowView.onLongPress (sender : __ObjC.UILongPressGestureRecognizer, forEvent : __ObjC.UIEvent) ->() at TikkunRowView.swift:128
0x602c9 <+89>: movl -0xc(%ebp), %eax
0x602cc <+92>: movl %eax, (%esp)
0x602cf <+95>: calll 0x7c9e6 ; symbol stub for: objc_release
0x602d4 <+100>: addl $0x24, %esp
0x602d7 <+103>: popl %esi
0x602d8 <+104>: popl %ebp
0x602d9 <+105>: retl
我在读这东西不是专家,但它看起来像飞机坠毁在一个应该分派给我的事件处理程序方法编译器生成的代码发生。我不知道此代码在调用我的代码之前检查的对象是什么(在偏移量< + 84 >)。这里是我用来构造手势识别器的代码:
let g = UILongPressGestureRecognizer(target: self, action: #selector(TikkunRowView.onLongPress(sender:forEvent:)))
我不知道为什么控制台没有给你任何细节错误信息。 (它应该!)但看着你的代码,这显然是由于手势动作回调的错误签名。以下是从api文档引用的。
调用必须符合下列签名之一所述的操作方法:
- (无效)handleGesture;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;
'第1步:确定导致崩溃的行:'如果这在模拟器崩溃,那么执行应停止在导致错误的行。如果不是,请添加一个异常断点。请添加适当的代码,指示哪一行执行停止。 '第2步:让人们检查崩溃日志:'请添加一个相关的符号化崩溃日志。 –
检查终端。任何东西都输出到那里?通常会有错误信息。而且,隐含地解开swift可选是大多数此类问题的原因。 –
@RoboticCat - XCode停止在我的应用程序委托的类声明中,而不是在任何可执行代码中。控制台中没有崩溃日志。 –