在黑暗中拍摄 - 应用程序错误


0

好吧,这将是一个在黑暗中的镜头,没有你能够看到我的应用程序!

我有一个错误。我有一个游泳池类,我的应用程序将游泳池从一个桌面视图传递到一个细节视图,您可以在其中看到所有的游泳池类字段。然后,您可以点击各个细节,进行编辑,然后保存。 “原始”池设施被复制并传递给负责实际进行更改的视图控制器。如果用户按下保存,场区被拷贝复制到“原始”

switch (self.sectionFromParentTable) { 
    case KNameIndex: 
     self.thePoolFacility.name = self.thePoolFacilityCopy.name; 
     self.thePoolFacility.type = self.thePoolFacilityCopy.type; 
     break; 

    case KAddressIndex: 
     self.thePoolFacility.address = self.thePoolFacilityCopy.address; 
     break; 

    case KPhoneNumberIndex: 
     self.thePoolFacility.phoneNumber = self.thePoolFacilityCopy.phoneNumber; 
     break; 

    case KWebAddressIndex: 
     self.thePoolFacility.webAddress = self.thePoolFacilityCopy.webAddress;   
     break; 
    case KPricesIndex: 
     self.thePoolFacility.prices = self.thePoolFacilityCopy.prices; 
     break; 
    case KPoolIndex: 
     self.thePoolFacility.pools = self.thePoolFacilityCopy.pools; 
    default: 
     break; 
} 

[self.navigationController popViewControllerAnimated:YES]; 

我可以在那做以下的错误一些猜测:

  1. 变迁中的错误结果完成 到一个班'没有被保存的字段。特别是一个名为TimeEntry的类,该类名为名为“周一”的可变数组,名为TermTimes,名为Pool,然后位于名为Pools的可变数组中。

  2. 它看起来是随机的。有时它 完美的作品。有时它不是 !我不能重新创建错误,只有在我运气好的情况下才能得到它 以便保存。我的直觉是它可能是对时间敏感的 。例如,如果我为 输入池时间表 开放时间,如果我快速添加一个 几个条目并保存它通常 工作正常。如果我填写整个 时间表,那么它不会保存多于 。

  3. 该应用不会崩溃。

这真气真的尝试和调试似乎随机发生的错误。任何关于这样一个史诗般的寻找bug的提示?

0

“随机”和“难以重现”让我觉得这是一个与多线程有关的问题。竞争条件很难重现和调试。您需要确保您拥有执行此操作所需资源的专有权限。

  0

对不起 - 我不知道多线程。我正在制作一个iPhone应用程序,并没有专门打开多线程 21 2月. 092009-02-21 22:42:48


2

解决这类问题的最佳方法之一(它似乎无法可靠地重现)是在您希望发生某些事情的各个领域插入日志代码。记录可能发生错误的位置,记录您期望的值和您拥有的值等。接下来,尝试尝试尝试,直到您可以重现该错误。

与以前不同,您现在有一个日志可以查看并查看出错的地方。如果事情在任何地方都看起来正确,请在其他地方插入更多日志代码如果您发现有问题,但不理解,请在该区域添加更多的日志代码,并继续缩小问题范围。

希望这会导致关于错误如何发生的新假设,并且您将能够可靠地在调试器下重现它并修复它!

正如duffymo所提到的,多线程可能是罪魁祸首,并且如果您有意使用多线程,它将是首先进行调查的好地方。


0

我的建议是寻找nils。对nil对象的任何方法调用都不会做任何事情,并返回nil,所以任何时候您希望调用一个方法,而不是,您应该寻找它。 (.foo =与setFoo:相同,因此为零。foo = 1;将不会做任何事情。)


0

感谢您的所有答案。现在已修好。

对于那些有兴趣的人,我忘了在我的细胞子类的XIB中添加cellidentifer。

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

这又是一个内存问题。这不总是这种情况!?!

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