无法将CoreData中的数据加载到tableview

时间:2016-09-11 13:17:59

标签: ios database swift uitableview core-data

我正在学习如何使用CoreData。我有一个带有添加按钮的tableView,它只用一个文本字段和一个保存按钮就可以分割成一个视图。按下按钮时,文本字段中的字符串将保存在CoreData数据库中:

    @IBOutlet weak var name: UITextField!
@IBAction func onSave(sender: UIBarButtonItem) {
        saveItem(name.text!)
        self.dismissViewControllerAnimated(true, completion: nil)
    }

    private func saveItem(itemName: String)
    {
       let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext
        let entity = NSEntityDescription.entityForName("Item", inManagedObjectContext: managedContext)
        let item = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)
        item.setPrimitiveValue(itemName, forKey: "name")

        do {
            try managedContext.save()
            listItems.append(item)


        }catch let error {
            print(error)
    }

tableView文件具有Controller类和NSManagedObject的全局数组: 以下是相关代码:

var listItems = [NSManagedObject]()//outside the class



override func viewWillAppear(animated: Bool) { //in the tableviewcontroller class

        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext

        let fetch = NSFetchRequest(entityName: "Item")

        do {
            let results = try managedContext.executeFetchRequest(fetch)
            listItems = results as! [NSManagedObject]
            //EDIT
            for item in listItems {
              print(item)
        }
        } catch let error {
            print(error)
        }


        self.tableView.reloadData()

    }
 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
        let item = listItems[indexPath.row]
        cell.textLabel?.text = item.valueForKey("name") as? String
        return cell

    }

数据库非常简单:名为Item的实体,其name属性

然而,这并不起作用。按下保存按钮时,不会添加新行。如果我删除viewWillAppear中的所有代码但self.tableView.reloadData(),则会创建行,但是当我重新启动应用时,它们就不存在了。

非常感谢任何帮助。

0 个答案:

没有答案