我的应用程序的第一个视图是UITableView。
用户将选择一个选项,下一个视图将是另一个UITableView。现在,用户可以点击“添加”按钮进入另一个UIViewController以在UITextField中输入文本。保存后,该文本将出现在之前的UITableViewCell中。
我遇到的问题:如果我退回到主视图然后回到原来的位置,那个输入的文本现在就消失了。
如何确保文本没有被释放或像这样消失?
答案 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以便分配&分配一次,不会使用新的值集重新创建。