我一直在为客户构建应用程序,一切顺利,直到我开始收到此错误。这是一个独特的情况,我已经学会了如何使用乐器和NSZombie但是我不能在iPhone上只在模拟器上运行带有NSZombieEnabled的乐器。我必须在iPhone中调试这个问题因为我正在使用UIImagePicker来拍照并且在我拍照后不久就会发生错误。我也在使用ARC,所以我根本无法设置发布或保留信息,ARC禁止它,所以我怀疑它是双版本还是类似的东西。这个问题有两个可能的答案。
1:有没有人知道我是否可以使用照相亭将图像传递到UIImagePicker?如果我能通过相机屏幕,我可以使用乐器和NSZombie。
2:有没有办法在没有使用iPhone重构或评论代码的情况下检测导致错误的行?有人知道在iPhone上追踪bad_acces的有效方法吗?
请记住我使用的是ARC,无法在模拟器上调试它。如果我取出UIImagePicker控件脚本,那么bug就不会发生,所以我把它缩小到我的CameraViewController类中。由于先前存在的合同,我担心我无法发布任何代码,您必须是一名员工才能查看源代码。
对于有限的信息感到抱歉,但实际上我正在寻找有关调试的答案,而不是直接解决我的确切代码问题。
发布回溯(我认为)
(gdb) bt
#0 0x339737e4 in objc_msgSend ()
#1 0x31b30140 in -[UIApplication sendAction:to:from:forEvent:] ()
#2 0x31b300e0 in -[UIApplication sendAction:toTarget:fromSender:forEvent:] ()
#3 0x31b300b2 in -[UIControl sendAction:to:forEvent:] ()
#4 0x31b2fe04 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#5 0x31b30452 in -[UIControl touchesEnded:withEvent:] ()
#6 0x31b2eddc in -[UIWindow _sendTouchesForEvent:] ()
#7 0x31b2e756 in -[UIWindow sendEvent:] ()
#8 0x31b299fe in -[UIApplication sendEvent:] ()
#9 0x31b29336 in _UIApplicationHandleEvent ()
#10 0x3026c04a in PurpleEventCallback ()
#11 0x3443fce2 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#12 0x3443fca6 in __CFRunLoopDoSource1 ()
#13 0x3443256c in __CFRunLoopRun ()
#14 0x34432276 in CFRunLoopRunSpecific ()
#15 0x3443217e in CFRunLoopRunInMode ()
#16 0x3026b5f2 in GSEventRunModal ()
#17 0x3026b69e in GSEventRun ()
#18 0x31ad0122 in -[UIApplication _run] ()
#19 0x31ace12e in UIApplicationMain ()
#20 0x000034ce in main (argc=1, argv=0x2ffff75c) at /Users/Andrew/Documents/Developing/Xcode Projects/ProjectSVN/Project/trunk/ProjectInterface/ProjectInterface/main.m:16
答案 0 :(得分:2)
EXC_BAD_ACCESS
并不一定意味着内存管理问题。它可能很容易由内存损坏或其他类型的错误引起。
发布崩溃的回溯。
答案 1 :(得分:0)
没有代码示例很难说,但是ARC并没有完全覆盖你的所有基础。例如,当对象(具有委托的类)不存在但尝试执行回调委托方法时,可能会出现这些EXC_BAD_ACCESS错误。
更具体地说,假设我在viewDidLoad:
中创建了一个类 - 让我们称之为ClassA
。在我假设的情况下,我将视图控制器设置为ClassA
的委托。但是,我没有为ClassA
声明属性,因此除了viewDidLoad:
的范围之外没有它的引用。
现在让我们假设ClassA
声明了一个由我的视图控制器实现的委托方法。此委托在此委托方法中将自身的引用传递回视图控制器。因为它可能会或可能不会超出范围,BOOM,访问错误。检查诸如此类之类的东西,其中对象不再存在并且被传递给其他方法 - 这是ARC可能使您失败的一种方式;)