准备争夺的永久数据

时间:2016-10-21 18:10:21

标签: arrays swift xcode segue

我目前正在尝试一起使用永久数据和准备癫痫。这是我到目前为止:(VC1)

override func viewDidAppear(_ animated: Bool) {

    let itemsObject = UserDefaults.standard.object(forKey: "items")


    if let tempItems = itemsObject as? [String] {

        items = tempItems

}

(VC2):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "toSecondViewController" {

        let itemsObject = UserDefaults.standard.object(forKey: "items")

        var items:[String]

        if let tempItems = itemsObject as? [String] {

            items = tempItems

            items.append(textField.text!)

            print(items)

        } else {

            items = [textField.text!]

        }

        UserDefaults.standard.set(items, forKey: "items")


    }
}

我正在尝试将一个项目添加到VC2上的数组中。然后我想将数组传输到VC1,同时永久存储它。我正在使用Xcode 8.0和Swift 3.0。

2 个答案:

答案 0 :(得分:1)

相反;当源视图控制器从storyboard或performSegue启动segue时,将调用视图控制器的prepareForSegue方法。在该方法中,您应确定要分割的视图控制器的类型并相应地设置属性。请注意,除非你有多个segue到同一个目的地,否则你真的不需要这个标识符,在这种情况下,知道调用哪一个有时很有用。

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let notificationsViewController = segue.destination as? NotificationsViewController {
            NotificationsViewController.notification = notification
        }
    }

答案 1 :(得分:1)

您的问题仅解释如何永久传递和存储数据。但是,您还没有提到要保存数据的位置。我认为,您使用tableView存储数据并检索它。

AppDelegate applicationDidFinishLaunching 中注册一个空数组作为键的默认值" NewArray"。

  let defaultValues = ["NewArray": [String]()]
  UserDefaults.standard.register(defaults: defaultValues)

第二个VC 中定义newArray(变量名应该以小写字母开头)也作为空字符串数组

 var newArray = [String]()

viewDidLoad 中从用户默认值中检索数组,追加新项目,将数组保存回用户默认值并重新加载表格视图

 override func viewDidLoad() {
 super.viewDidLoad()

 let defaults = UserDefaults.standard
 newArray = defaults.array(forKey: "NewArray") as! [String]
 newArray.append(newItem) //newItem is the data.Which you passing from First VC
 defaults.set(newArray, forKey: "NewArray")
 self.tableView?.reloadData()
}

除非你传递数据,否则你不需要在第二个VC上使用segue ......