如何防止NSMutableArray丢失数据?

时间:2012-12-22 02:38:03

标签: objective-c uitableview uitextfield

我的应用程序的第一个视图是UITableView。

用户将选择一个选项,下一个视图将是另一个UITableView。现在,用户可以点击“添加”按钮进入另一个UIViewController以在UITextField中输入文本。保存后,该文本将出现在之前的UITableViewCell中。

我遇到的问题:如果我退回到主视图然后回到原来的位置,那个输入的文本现在就消失了。

如何确保文本没有被释放或像这样消失?

3 个答案:

答案 0 :(得分:1)

您可能希望将此数组存储在项目的其他位置,例如MVC(数据模型)。您可以为它创建一个新类,它通过类传递信息并将数组存储在一个位置。然后,一旦添加到数组,就可以引用该类并在该类中调用一个方法来将文本存储在数组中,每当加载表视图时,它都会在类中加载该数组。

在我的情况下,我会这样做,但我会制作所有类方法(你无法访问属性或ivars),只需将数组存储在用户默认/ Web服务或任何需要的地方,然后检索并添加/返回它是这样的:

+ (NSMutableArray *)arrayOfSavedData {

    return [[NSUserDefaults standardUserDefaults] objectForKey: @"savedData"];
}

+ (void)addStringToArray: (NSString *)stringFromTextField {

   [[[[NSUserDefaults standardUserDefaults] objectForKey: @"savedData"] mutableCopy] addObject: stringFromTextField];

}

mutableCopy部分非常重要,因为在将数据存储到用户默认值后,数组不会保持可变性

答案 1 :(得分:0)

文本消失的原因可能是因为当你回到原来的位置时,你正在实例化新的控制器。您可以对控制器保持强引用,并且仅在尚不存在的情况下实例化一个控制器。究竟如何做到这一点取决于你如何在控制器之间移动 - 无论你是在代码中执行,还是使用故事板。

答案 2 :(得分:0)

这类问题非常频繁。当您移动多个控制器和视图时。

每次加载新视图和控制器都是alloc + init时,会分配新的值集,并且不使用以前的值!!!。

您可以使用SharedInstance / SingletonClass以便分配&分配一次,不会使用新的值集重新创建。