iPhone Bug 应用程序 bug 问题和挑战

问题描述 投票:0回答:3

我的应用程序中有一个非常烦人的错误。这让我发疯,我确信这超出了我的技能水平,因为我正在不断学习。

以下是该错误的初步概要:黑暗中的一枪 - 应用程序错误

但是我找到了一种方法来一致地重现错误(仅在设备上而不是在模拟器中)

首先创建一个新池并保存它。然后将20个空白时间整体加到一天中。保存它,这就是问题开始的地方。 (当您返回到主要详细信息视图时,表格视图已退出编辑模式并被告知这样做)。现在,如果您回到当天查看刚刚添加的时间条目,它们仍然存在。

如果您返回到列出所有池的主整体表格视图,现在返回到您添加它们消失的时间的那一天。

添加一次就可以了。加二十还是不省。

主菜单列出池:

https://farm4.static.flickr.com/3503/3301053744_0325d5bc2c.jpg?v=0

细节图:

https://farm4.static.flickr.com/3546/3300222271_223d2c74e9.jpg?v=0

编辑视图:

https://farm4.static.flickr.com/3625/3300222887_b02c3e2052.jpg?v=0

时间编辑视图:

https://farm4.static.flickr.com/3547/3301056092_8d3ab78225.jpg?v=0

添加时间:

https://farm4.static.flickr.com/3635/3300224157_14c30cf58f.jpg?v=0

如果有更多的猜测,我将不胜感激。

iphone objective-c cocoa-touch
3个回答
1
投票

如果您还没有这样做,我建议您打开

NSZombie
支持并查看您是否在释放任何对象后使用它们。据我所知,这可以在模拟器和设备上打开。


0
投票

最有可能的是,您未能在途中的某个地方保留某些物体。当一个对象被释放然后内存被重新用于其他用途时,您会遇到各种不良行为,包括崩溃或其他对象神秘的“消失”。

您可以尝试的一件事是将断点放入自定义类的 -dealloc 方法中。然后您可以看到它们是从哪里释放的。不过,最有可能的是,这最终会在 AutoreleasePool 耗尽时结束,这不会告诉你太多信息。

或者,考虑使用 Cocoa 中内置的一些内存调试工具

该文档适用于 Mac OS X,但我认为所有这些至少都可以在 iPhone 模拟器中运行。我知道你的错误在模拟器中“不会发生”,但这实际上只意味着症状不同,而你没有注意到它们。


0
投票

感谢您的所有回答。现在已经修复了。

对于那些感兴趣的人,我忘记在我的细胞子类的 XIB 中添加细胞标识符。

cellForRow: 方法因此每次都会创建一个新单元格。记忆很快就被填满了。然后,似乎我的应用程序自动尝试通过强制另一个 tableView 退出编辑模式而不正确管理我的实例来减少脂肪。

这又是一个内存问题。不是一直都是这样吗!!

线索是控制台中出现一次性 101 错误,表明我的应用程序使用了太多内存。哦,还有一个缓慢滚动的 tableView。

© www.soinside.com 2019 - 2024. All rights reserved.