2015-08-31 28 views
1

firstViewController中使用類型爲'(String)'的參數列表調用'append'。這是問題所在。在我的'循環'它給我一個錯誤。我試圖使用Xcode建議的內容,但它不起作用。我仍然認爲自己是Swift的初學者。當人們發佈相同的問題時,我查看了其他答案,但仍無法解決問題。無法在firstViewController的firstViewController

import UIKit 

var toDoItems:[String] = [] 

class FirstViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet var tasksTable:UITableView? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return toDoItems.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 

     cell.textLabel?.text = toDoItems[indexPath.row] 

     return cell 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewWillAppear(animated: Bool) { 

     if var storedToDoItems : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") { 

      toDoItems = [] 

      for var i = 0; i < storedToDoItems?.count(); ++i { 
       toDoItems.append(storedToDoItems[i] as! String) 
      } 

     } 

     tasksTable?.reloadData() 
    } 


} 

這是我的secondViewController。

import UIKit 

class SecondViewController: UIViewController, UITextFieldDelegate { 


    @IBOutlet weak var toDoItem: UITextField! 

    @IBAction func addItemButton(sender: AnyObject) { 

     toDoItems.append(toDoItem.text) 

     let fixedToDoItems = toDoItems 

     NSUserDefaults.standardUserDefaults().setObject(fixedToDoItems, forKey: "todDoItems") 
     NSUserDefaults.standardUserDefaults().synchronize() 

     self.view.endEditing(true) 

    } 

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

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 
     return true 
    } 

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     self.view.endEditing(true) 
    } 


} 

回答

2

當您從NSUserDefaults加載待辦事項列表數組,使用if let來測試它是否是一個[String](即字符串數組),然後你就不會需要將其轉換爲String稍後,這可能會導致你的錯誤。試着用這個替換您viewWillAppear方法:

override func viewWillAppear(animated: Bool) { 

    if let storedToDoItems = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] { 

     toDoItems = [] 

     for item in storedToDoItems { 
      toDoItems.append(item) 
     } 
    } 

    tasksTable?.reloadData() 
} 

override func viewWillAppear(animated: Bool) { 

    if let storedToDoItems = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] { 

     toDoItems = [] 

     for var i = 0; i < storedToDoItems.count; ++i { 
      toDoItems.append(storedToDoItems[i]) 
     } 
    } 

    tasksTable?.reloadData() 
} 

當你在它,有過在斯威夫特(和許多其他語言)數組的內容更加美好的方式對環

但是,在這種情況下,您應該能夠直接從已加載的變量中設置變量:

override func viewWillAppear(animated: Bool) { 

    if let storedToDoItems = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] { 
     toDoItems = storedToDoItems 
    } 

    tasksTable?.reloadData() 
} 
+0

這有效。謝謝@羅伯特。現在我試圖讓數組在控制檯中顯示。它沒有顯示我放入數組中的元素。 –

+0

我想我可以使用一個簡單的println()將其打印到控制檯以顯示元素。 –

+1

您應該可以添加'println(toDoItems)'作爲'if let'塊的最後一項來驗證它是否正確加載了您的項目。 – Robert

相關問題