2

我开发了我的应用程序,使用我的3G设备进行测试。在给朋友测试时,他发现它崩溃了。我查看了崩溃日志,但除了几条内存警告之后的“EXC_BAD_ACCESS”语句外,没什么用处。帮助调试iPhone应用程序 - EXC_BAD_ACCESS

在我的设备上,我可以使用imagePicker批次,并且每次拍摄照片时都会收到内存警告,但这不会导致任何问题。

在我的朋友的设备(也是3G)上,从相机中选择了几张图像后,该应用程序崩溃。

所以,我的问题是..我认为东西被释放,因为内存警告 - 但只有我的朋友的设备上,然后释放之后,它试图再次使用。我怎样才能找出被调用的对象?我无法使用NSZombies,因为这是一个远程(测试版)设备。

请帮忙!

此外,如果任何人有任何想法,为什么我的设备可以像挑选后的图像,没有任何问题,他不能...这将是最有帮助的

谢谢!

编辑:新的发现..我也收到这个错误信息:KERN_PROTECTION_FAILURE,我知道是与数据访问有关。我保存从UIImagePicker获得的图像后,崩溃似乎发生。有任何想法吗?

+1

可能是图像选取器的代表。你有可能发布了它吗?您的朋友仍然可以发送崩溃日志。搜索谷歌如何让他们与iTunes和如何符号。 – 2010-01-08 00:28:49

+0

我不认为我已经发布了它。我只是关闭了didFinishPickingMediaWithInfo委托方法中的选择器。虽然也许我应该在使用拾取器之前使用返回的“信息”?目前,我先解雇了选择器,然后利用返回的图像 – 2010-01-08 00:55:27

回答

3

您可能会过度释放某些东西。如果您正在运行Snow Leopard,请运行静态分析器(Cmd-Shift-A)并查找内存错误。

事实上,它在内存错误后崩溃表明UIViewController已经发布了它的视图。你有任何UIViewControllers观察NSNotifications,否则可能会改变他们的IBOutlets,而他们是在屏幕外?这是这种崩溃的常见原因。确保你是correctly memory managing your IBOutlets。 UIViewControllers在屏幕外不应该混淆他们的IBOutlets(或者他们的UI组件)。即使你不犯这个错误,如果你没有执行上述链接中提到的事情,你仍然可以在内存警告后崩溃。

MemoryWarning是一个非常不错的主意,事情已经有所改善,但苹果仍然没有完全熟悉UIViewController的使用方式。开发者仍然需要非常小心。

+0

嗨。我尝试了静态分析器,没有出现错误。实际上,除了窗口底部的“成功”消息之外,什么都没有发生。很奇怪。 – 2010-01-07 23:31:29

+0

并不奇怪。只是意味着你没有明显的错误。对IBOutlets的管理不当将不会被叮当抓住,也不会通知发布的对象。 – 2010-01-08 00:26:59

+0

从我的日志文件中,我可以看到以下内容。这是否意味着问题发生在[PictureView clearPage]? 异常类型:EXC_BAD_ACCESS(SIGBUS) 异常代码:KERN_PROTECTION_FAILURE在0x0000000f 崩溃螺纹:0 线程0毁损: 0 libobjc.A.dylib \t 0x00003ebc objc_msgSend + 20 1 MyApp的\t 0x0000378a - [PictureView clearPage](PictureView .m:79) – 2010-01-08 20:46:34

0

你应该让你的朋友来到你的电脑并用NSZombieEnabled运行它。这是调试这些问题的最佳方法。

+0

是的,这就是我想要做的,但这是不可能的。有没有办法记录这样的事情? – 2010-01-07 23:02:05