使用TableviewController时崩溃

时间:2016-09-03 20:57:23

标签: swift uitableview

我试图使用TableViewController,但它让我发疯,因为我真的不明白我的代码在一个项目中崩溃而在另一个项目中崩溃。

同一代码(复制粘贴)到不同的XCode项目成功运行。

这是我的代码:

import UIKit
class ViewController: UITableViewController {
    var listeDeListes = [AnyObject]()
     override func viewDidLoad() {
        super.viewDidLoad()

        self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: #selector(ViewController.addItem))

        if (NSUserdefault.standartDefault.objectForKey("identity") != nil) {
            listeDeListes = NSUserDefaults.standardUserDefaults().arrayForKey("identity")!
        }  
    }

    func addItem() {

        let alertController = UIAlertController(title: "New Resolution", message: "", preferredStyle: UIAlertControllerStyle.Alert)
        let confirmAction = UIAlertAction(title: "Confirm", style: UIAlertActionStyle.Default, handler: ({
            (_) in

            if let field = alertController.textFields![0] as? UITextField {

                self.saveItem(field.text!)
                self.tableView.reloadData()
            }
        }))

        let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
        alertController.addTextFieldWithConfigurationHandler ({
            (textField) in

            textField.placeholder = "Type smothing..."

        })

        alertController.addAction(confirmAction)
        alertController.addAction(cancelAction)

        self.presentViewController(alertController, animated: true, completion: nil)
    }

    func saveItem(itemToSave: String) {
        let defaults = NSUserDefaults.standardUserDefaults()
        //defaults.setInteger(identity, forKey: "identity")

        listeDeListes = listeDeListes + [itemToSave]
       defaults.setObject(listeDeListes, forKey: "identity")
        defaults.synchronize()

    }
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 50
    }

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell

        let item = listeDeListes[indexPath.row]

        cell.textLabel?.text = item as! String

        return cell
    }

此代码有效且无法同时运行。请帮我找出原因和方法。

在"坏"项目"我收到此错误消息:  image

2 个答案:

答案 0 :(得分:1)

您需要使用相同的标识符注册单元格。

由于您正在使用故事板设置表格,因此在故事板中选择TableViewController中的单元格,然后打开属性检查器(⌥⌘4)并在标识符前面写入Cell

答案 1 :(得分:1)

这可能是因为您没有通过Storyboard为表视图的原型单元格设置重用标识符。

您是否也可以尝试将单元格代码更改为

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell