我将内容添加到主视图控制器上的集合视图中,将该内容添加到数组中,浏览我的应用程序,返回并且集合视图完全为空。
我觉得奇怪之前我还没有遇到过这个问题,因为我已经完成了教程并制作了待办事项列表和类似的应用程序,你可以转到另一个页面,回来,数据是仍然很机智。
因此,如果您离开VC时数组丢失了数据,那么在您离开后如何保持集合视图正常?重新加载数据是行不通的,因为回到屏幕时内容数组是空的。
答案 0 :(得分:2)
您遇到的问题是您没有持久存储空间。在iOS中,如果设备上没有存储某些内容,则一旦离开View Controller,它就会很容易丢失。
/////////////////////////////////////////////// ///////////////////////
修改强>:
当保存它们的对象被解除分配时,或者当它们的值以某种方式明显改变时,变量会丢失它们的值(参见其他答案)。
例如,某些segue类型可能会创建VC的新实例,从而导致数据丢失。永久存储值可以绕过这些问题。
/////////////////////////////////////////////// //////////////////////
就持久存储而言,有以下几种选择:
1)使用在线数据库(虽然需要WiFi)
2)使用NSUserDefaults(容易持久存储以获取相当小的信息:避免图像)
3)核心数据(设备上的持久存储:更复杂但功能更强大)
我建议从数组的NSUserDefaults开始,因为这很容易学习。
以下是您可以写入NSUserDefaults的方法:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(myArray, forKey: "arrayKey")
这就是你可以检索数据的方法:
var retrievedArray = defaults.objectForKey("arrayKey") as [String]
我假设它是一个字符串数组。 因此,当您向数组添加数据时,将其存储在NSUserDefaults中,然后,当您需要检索数据时,从那里获取数据。
此外,这将允许您在其他ViewControllers以及应用程序终止后访问此信息。换句话说,数据是留下来的。您当然可以覆盖它,也可以通过删除应用程序将其删除。
看看这个: https://www.hackingwithswift.com/read/12/2/reading-and-writing-basics-nsuserdefaults
答案 1 :(得分:1)
因此,当你离开VC时数组会丢失数据
他们没有。当保存它们的对象被解除分配时,或者当它们被明确清除/重新初始化/删除时,它们会丢失它们的值。
您确定包含集合视图的视图控制器是否已取消分配?您是否在viewWillAppear()
,viewDidAppear()
,viewWillDisappear()
或viewDidDisappear()
重置数组?