我目前正在尝试一起使用永久数据和准备癫痫。这是我到目前为止:(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。
答案 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 ......