好的,所以如果没有你能看到我的申请,这将是一个黑暗的镜头!
我有一个错误。我有一个SwimmingPool课程,我的应用程序将池从tableview传递到详细视图,在那里你可以看到所有的swimPool类字段。然后,您可以单击各个详细信息,对其进行编辑,然后保存。复制“原始”池工具并将其传递给负责实际进行更改的视图控制器。如果用户按下保存,则会将字段从副本复制到“原始”
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];
我是否可以对执行以下操作的错误进行一些猜测:
该错误会导致更改完成 到一个班级'没有被保存的领域。特别是一个名为TimeEntry的类,在一个叫做“星期一”的可变数组中,在名为pool的类中称为TermTimes的Dictionary中,然后是一个名为Pools的可变数组。
它似乎是随机的。有时它 工作得很好。有时它 不!我无法重新创建错误, 只有我很幸运才能得到它 保存。我的预感是可能的 对时间敏感的。例如,如果我是 输入Pool的时间表 开放时间,如果我快速添加一个 几个条目,通常保存 工作良好。如果我填写一个整体 时间表然后它不止于此 不保存。
它激怒了尝试并调试了一个似乎随机发生的错误。关于这样一个史诗般的虫子的任何暗示?
答案 0 :(得分:2)
解决此类问题的最佳方法之一(似乎无法可靠地再现)是在您希望发生某些事情的各个领域插入日志记录代码。记录可能发生错误的位置,记录您期望的值以及您拥有的值等。接下来,尝试尝试,直到您可以重现该错误。
与以前不同,您现在有一个日志可以查看并查看出错的地方。如果在任何地方看起来仍然正确,请在其他位置插入更多日志代如果你看到出现问题但却不理解,那么在该区域放置更多的日志记录代码并继续缩小问题范围。
希望这会导致关于bug如何发生的新假设,并且您将能够可靠地在调试器下重现它并修复它!
正如duffymo所提到的,多线程可能是罪魁祸首,如果您故意使用多线程,那么首先进行调查是一个好地方。
答案 1 :(得分:0)
“随机”和“难以重现”让我觉得这是一个与多线程有关的问题。竞争条件非常难以重现和调试。您需要确保您拥有执行此操作所需资源的专有权。
答案 2 :(得分:0)
我的建议是寻找nils。对nil对象的任何方法调用都不会做任何事情并返回nil,所以每当你期望一个方法被调用而它不是,你应该寻找它。 (.foo =和setFoo:相同,所以nil.foo = 1;什么都不做。)
答案 3 :(得分:0)
感谢您的所有答案。它现在已经修好了。
对于那些感兴趣的人,我忘了在我的细胞亚类的XIB中添加一个cellidentifer。
因此,cellForRow:方法每次都会创建一个新单元格。记忆很快就被填满了。然后,好像我的应用程序通过强制另一个tableView从编辑模式强制而不是正确管理我的实例来自动尝试削减脂肪。
这又是一个记忆问题。是不是总是这样!?!
线索是控制台中的一次性101错误,表明我的应用程序使用了太多内存。哦,还有一个慢滚动的表格。