【发布时间】:2013-07-21 17:11:55
【问题描述】:
我是 ios 开发的新手,我正在尝试创建一个简单的测试应用程序,允许用户在药柜中记录和编辑他们的药片。
我正在使用 ios 6.1、arc 和 segues。
错误背景:
因此,用户在他们的药柜中有一个药丸列表,他选择了一个,然后一个 segue 将他带到一个视图控制器,该控制器为他提供有关该药丸的信息。然后,他可以选择编辑将他转移到另一个视图控制器的信息,该控制器在他可以编辑的文本字段中显示所有当前信息,然后单击一个保存按钮,该按钮启动对原始药柜的展开转移。
我得到的错误是这个。用户可以编辑信息并成功保存并弹出回文件柜。但是当他再次去编辑药丸时,我得到了错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString appendString:]: nil argument'
我做了一些挖掘,发现了发生了什么。在 unwind segue 方法中,我成功地设置了药丸的属性以匹配 editPillView 控制器的文本字段中的文本。例如,我有一颗药丸,它属于杰伊。但后来我编辑它并说它属于 Raf。使用断点,我可以在 MedicineCabinetViewController 的 unwind segue 方法中看到字符串从 Jay 变为 Raf。但是一旦展开 segue 完成,我看到在某些时候,字符串在苹果的代码中被设置为 nil(可能是因为 arc 正在释放内存,因为不再需要 EditPillViewController 并且药丸的所有者属性然后变为空指针)。然后当用户再次单击药丸时,药丸信息视图控制器正在尝试使用空指针和 BOOM。
我尝试了很多解决方案来尝试保持字符串保持不变,例如使用 NSString 复制方法。有什么想法吗?
【问题讨论】:
标签: iphone ios objective-c ios6 segue