我正在尝试在Swift中编写一个简单的待办事项列表,它将列表存储为字符串数组,然后在应用程序加载时从内存中调用它.
我有以下代码:
var itemList = [String]()
func loadData() -> [String] {
var arr = [String]()
if NSUserDefaults.standardUserDefaults().objectForKey("storedData") != nil {
arr = NSUserDefaults.standardUserDefaults().objectForKey("storedData")! as! [String]
}
else {
arr = ["Nothing to do..."]
}
return arr
}
func saveData(arr: [String]) {
NSUserDefaults.standardUserDefaults().setObject(arr, forKey: "storedData")
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是在何处调用loadData().这是一个具有两个视图控制器的应用程序(一个用于列表,一个用于添加项目设置),因此如果我在主视图控制器的viewDidLoad()中放置loadData()调用,则从内存中调用该数组每次切换回主视图控制器时(并覆盖).
在应用程序启动时,最好的地方在哪里调用它以便它只加载一次?
每次切换回主视图控制器时,都会从内存中调用数组(并重写).
号viewDidLoad只加载一次,应用程序启动时.只有viewWillApprear和viewDidAppear获得每次调用视图-控制的变化.
您还可以使用以下命令使代码更紧凑if let:
if let storedData = NSUserDefaults.standardUserDefaults().objectForKey("storedData") as! [String]{
arr = storedData
}
Run Code Online (Sandbox Code Playgroud)
但是如果你想确保只加载一次,你可以把它放在你AppDelegate的applicationDidFinishWithOptions方法文件中.
但是你必须在AppDelegate文件中创建一个可以从viewController访问的变量.
| 归档时间: |
|
| 查看次数: |
7728 次 |
| 最近记录: |