【问题标题】:Permanent Data with Prepare For Segue带有准备 Segue 的永久数据
【发布时间】:2016-10-21 18:10:20
【问题描述】:

我目前正在尝试同时使用永久数据和为 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。

【问题讨论】:

    标签: arrays swift xcode segue


    【解决方案1】:

    反过来;当您的源视图控制器从情节提要或 performSegue 启动 segue 时,将调用 source 视图控制器的 prepareForSegue 方法。使用该方法,您应该确定您要使用的视图控制器的类型并相应地设置属性。请注意,您实际上并不需要标识符,除非您有多个到同一个目的地的 segue,在这种情况下,有时知道正在调用哪一个很有用。

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

    【讨论】:

    • 不,您仍然需要将其写入 viewDidLoad 中的 Userdefaults 或您想保存数据的任何时间/时间。不过,您可以将内存中的副本传递给子视图控制器。没有理由从磁盘读回它,除非您认为可以从其他地方对其进行修改,在这种情况下,您应该考虑使用 NotificationCenter 为每个观察该数据以刷新自身的视图控制器发布消息。
    【解决方案2】:

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

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

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

    Second 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,除非你从它传递数据......

    【讨论】:

      猜你喜欢
      • 2017-03-05
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2017-10-02
      相关资源
      最近更新 更多