2016-10-21 4 views
0

現在、恒久データと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を使用しています。

答えて

1

その逆です。ソースビューコントローラがストーリーボードまたはperformSegueのいずれかからセグを開始すると、ソースビューコントローラのprepareForSegueメソッドが呼び出されます。このメソッドでは、継承するView Controllerのタイプを決定し、それに応じてプロパティを設定する必要があります。同じ宛先に2つ以上のセグがある場合を除いて、識別子が本当に必要ないことに注意してください。この場合、どちらが呼び出されているかを知るのに時に便利です。

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

これはデータを永久に保存しますか? –

+0

viewDidLoadのUserdefaultsに書き込む必要はありません。また、データを永続化する必要があるときはいつでも、どこにでも書くことができます。ただし、メモリ内コピーを子ビューコントローラに渡すことはできます。他の場所から変更することができないと思わないかぎり、ディスクから読み取る必要はありません。その場合、NotificationCenterを使用して、データを更新するすべてのView Controllerに対してメッセージを送信することを検討する必要があります。 –

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() 
} 

であり、2番目のVCでsegueを使用する必要はありません。

+0

viewDidLoadコードをVC1またはVC2に追加しますか? –

+0

私の答えを読むagain.in VC2 ... – Joe

関連する問題