2016-10-02 8 views
0

私は2つのtableViewをプロジェクトで実行しています。最初のtableViewから2番目のtableViewコントローラにsegue.Iを使用してデータを正常に渡しましたが、NSUserDefaultsを使用してsecondViewControllerに渡したデータを保存しようとしています。下記の私の部分のコード....SwiftのindexPathにTableView Arrayを保存する

まずVC:

var tableView: UITableView! 
var DataArray = ["Bus","Helicopter","Truck","Boat","Bicycle","Motorcycle","Plane","Train","Car","S cooter","Caravan"] 
var sendSelectedData = NSString() 


override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
let indexPath = tableView.indexPathForSelectedRow! 
let currentCell = tableView.cellForRow(at: indexPath) as UITableViewCell! 
     // print(indexPath) 
     // print(currentCell) 

sendSelectedData = (currentCell!.textLabel?.text)! as String as NSString 
performSegue(withIdentifier: "ShowDetails", sender: indexPath) 

} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    let selectedIndex = sender as! NSIndexPath 
    let currentCell = tableView.cellForRow(at: selectedIndex as IndexPath)! 
    self.sendSelectedData = (currentCell.textLabel?.text)! as String as NSString 
    if segue.identifier == "ShowDetails" { 

    let viewController = segue.destination as! SecondController 
    viewController.newItem = (self.sendSelectedData as String) 

    } 
} 

第二VC:

var NewArray = [""] 

var newItem: String = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    NewArray.insert(newItem, at: Array.count) 
    self.tableView?.beginUpdates() 

    // NewArray.append(newItem) 

    let defaults = UserDefaults.standard 
    defaults.object(forKey: "NewArray") 

    self.tableView?.endUpdates() 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell 

    cell.textLabel?.text = NewArray[(indexPath as NSIndexPath).row] as String 
    return cell 
    } 

    func insertRowsAtIndexPaths(indexPaths: [AnyObject], withRowAnimation animation: UITableViewRowAnimation) { 
    } 

    func reloadRowsAtIndexPaths(indexPaths: [AnyObject], withRowAnimation animation: UITableViewRowAnimation) { 

    } 

私はこの機能を達成するためにhttps://grokswift.com/uitableview-updates/の記事に従っています....

ありがとうございました。

答えて

1

AppDelegateapplicationDidFinishLaunchingキー "NewArray"のデフォルト値として空の配列を登録します。

セカンドVCで
let defaultValues = ["NewArray": [String]()] 
UserDefaults.standard.register(defaults: defaultValues) 

としても、空String配列viewDidLoad

var newArray = [String]() 

は新しいを追加し、ユーザーのデフォルト値から配列を取得(変数名は小文字で始めることになっている)newArrayを定義します項目を保存して、アレイをユーザーのデフォルトに戻し、テーブルビューをリロードします。

override func viewDidLoad() { 
    super.viewDidLoad() 

    let defaults = UserDefaults.standard 
    newArray = defaults.array(forKey: "NewArray") as! [String] 
    newArray.append(newItem) 
    defaults.set(newArray, forKey: "NewArray") 
    self.tableView?.reloadData() 
} 

beginUpdates(),endUpdates()およびinsertRowsAtIndexPath/reloadRowsAtIndexPathsは全く必要ではない。

+0

ありがとうあなたのコードは素晴らしい、理解しやすいです。もう一度....ありがとうございます – Joe

関連する問題