2013-07-21 71 views
0

我新的iOS开发,我想创建一个简单的测试应用程序,允许用户记录,并在他们的药柜编辑他们的药丸。开卷Segue公司无参数错误

我使用的是ios 6.1,arc和segues。

背景的错误:

,因此用户在他们的药柜药清单,他拿起一个和SEGUE将他带到一个视图控制器,让他谈丸的信息。然后,他可以选择编辑信息,让他看到另一个视图控制器,该视图控制器显示他可以编辑的文本框中的所有当前信息,然后单击一个保存按钮,该按钮可启动原始药品柜的放松继续。

我得到的错误是这样的。用户可以编辑信息并成功保存并弹出到机柜。但后来当他再次进入编辑避孕药,我得到的错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString appendString:]: nil argument'

我做了一些挖掘,我发现了什么事情。在unwind segue方法中,我成功设置了pill的属性以匹配editPillView控制器文本字段中的文本。例如,我有一颗药丸,它属于杰伊。但是,我编辑它并说它属于Raf。使用断点,我可以在MedicineCabinetViewController的unwind segue方法中看到从Jay到Raf的字符串更改。但是一旦unwind segue完成后,我发现在某些时候,苹果代码中的字符串被设置为零(可能是因为arc正在释放内存,因为EditPillViewController不再需要,并且pill的owner属性变成空指针)。然后,当用户再次点击药丸时,pillInfoViewController正试图使用​​空指针和BOOM。

我已经尝试了许多解决方案,以尽量保持串留RAF如使用NSString的复制方法。有任何想法吗?

回答

0

当你做一个展开SEGUE,从你从放卷,回,但不包括你展开到一个一个的任何控制器,将被释放,除非你有很强的借鉴他们。所以,如果药物的所有者属性位于MedicineCabinetViewController中,那么当控制器被释放时它将消失。

有几种方法可以解决这个问题。一种方法是使用代码而不是使用segues在应用程序中导航,因此您可以保留对您创建的控制器的引用,并且只在不存在时才分配一个控制器。

另一种方法是有一个模型类,这是一个单身,这活的应用程序的生命。这样,所有关于药物的数据都将是该单身人士课程中某些物体(或物体)的特性。

+0

这是一个完美的答案!谢谢!我使用强引用来修复它。 –