我的应用程序的第一个视图是 UITableView。
用户将选择一个选项,下一个视图将是另一个 UITableView。现在,用户可以点击“添加”按钮,将其带到另一个 UIViewController 以在 UITextField 中输入文本。保存后,该文本将出现在前一个 UITableViewCell 中。
我遇到的问题:如果我回到主视图然后回到我以前的位置,那么输入的文本现在就消失了。
如何确保文本不会像这样被释放或消失?
我的应用程序的第一个视图是 UITableView。
用户将选择一个选项,下一个视图将是另一个 UITableView。现在,用户可以点击“添加”按钮,将其带到另一个 UIViewController 以在 UITextField 中输入文本。保存后,该文本将出现在前一个 UITableViewCell 中。
我遇到的问题:如果我回到主视图然后回到我以前的位置,那么输入的文本现在就消失了。
如何确保文本不会像这样被释放或消失?
您可能希望将此数组存储在项目中的其他位置,例如 MVC(数据模型)中。您可以为其创建一个新类,通过这些类传递信息并将数组存储在一个地方。然后,一旦您添加到数组中,您就可以引用该类并调用该类中的方法以将文本存储在数组中,并且每当您加载表视图时,它都会在类中加载该数组。
在我的情况下,我会这样做,但我会创建所有类方法(您无法访问属性或 ivars)并将数组存储在用户默认值/Web服务或您需要的任何地方,然后像这样检索和添加/返回它:
+ (NSMutableArray *)arrayOfSavedData {
return [[NSUserDefaults standardUserDefaults] objectForKey: @"savedData"];
}
+ (void)addStringToArray: (NSString *)stringFromTextField {
[[[[NSUserDefaults standardUserDefaults] objectForKey: @"savedData"] mutableCopy] addObject: stringFromTextField];
}
这mutableCopy
部分很重要,因为数组在将它们存储到用户默认值后不会保持可变
文本消失的原因可能是因为当您回到原来的位置时正在实例化新的控制器。您可以保留对控制器的强引用,并且仅在它尚不存在时才实例化它。具体如何执行此操作取决于您在控制器之间移动的方式——无论您是在代码中执行此操作,还是使用情节提要。
这种问题非常频繁。当您移动多个控制器和视图时。
每次加载新视图并且控制器是 alloc+init 时,都会分配一组新的值并且不使用以前的值!!!。
您可以使用 SharedInstance/SingletonClass 以便它被分配和分配一次,并且不会使用新的值集重新创建。