如何在应用程序首次加载时运行函数

lor*_*lor 4 ios swift

我正在尝试在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()调用,则从内存中调用该数组每次切换回主视图控制器时(并覆盖).

在应用程序启动时,最好的地方在哪里调用它以便它只加载一次?

Chr*_*örz 7

每次切换回主视图控制器时,都会从内存中调用数组(并重写).

viewDidLoad只加载一次,应用程序启动时.只有viewWillApprearviewDidAppear获得每次调用视图-控制的变化.

您还可以使用以下命令使代码更紧凑if let:

  if let storedData = NSUserDefaults.standardUserDefaults().objectForKey("storedData") as! [String]{
     arr = storedData
  }
Run Code Online (Sandbox Code Playgroud)

但是如果你想确保只加载一次,你可以把它放在你AppDelegateapplicationDidFinishWithOptions方法文件中.

但是你必须在AppDelegate文件中创建一个可以从viewController访问的变量.