ios - swift - NSMangedObjectContext 不刷新数据

标签 ios swift cocoa-touch core-data

我有两个 View Controller ,第一个用于显示存储在 CoreData 中的对象列表,第二个用于创建新对象。

创建新对象后,我返回对象列表,但新创建的对象不存在。重新启动应用程序后,将显示新对象。这是我的代码:

ListOfProjectsViewController:

var projects:[ProjectItem] = []

lazy var managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    override func viewDidAppear(animated: Bool) {
        loadProjects()
    }

    func loadProjects() {

        do {
            let results = try managedObjectContext.executeFetchRequest(fetchRequest)
            projects = results as! [ProjectItem]

            tableView.reloadData()
        } catch let error as NSError {
            print("Could not fetch \(error), \(error.userInfo)")
        }

    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "CreateNewProjectSegue" {
            let vc = segue.destinationViewController as! CreateNewProjectViewController
            vc.project = NSEntityDescription.insertNewObjectForEntityForName("ProjectItem", inManagedObjectContext: managedObjectContext) as? ProjectItem
        }
    }

创建新项目:

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var project:ProjectItem?

@IBAction func saveAndCloseBtnPressed(sender: AnyObject) {
        project?.title = projectTitleField.text
        project?.number = projectNmField.text
        project?.comments = projectCommentsTextView.text

        try! project?.managedObjectContext?.save()

        do {
            try self.managedObjectContext.save()
        } catch {
            fatalError("Failure to save context: \(error)")
        }

        self.navigationController?.popViewControllerAnimated(true)

    }

我做错了什么?

最佳答案

managedObjectContext.executeFetchRequest(fetchRequest) 返回一个静态数组,因此它不会在基础数据更改时更新。

您应该改用 NSFetchedResultsController,这样您就可以在发生变化时收到更新通知。

关于ios - swift - NSMangedObjectContext 不刷新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928451/

相关文章:

iphone - 如何向 UITableView 添加一次性部分和部分标题?

objective-c - 如何获取触摸事件的坐标

ios - UITabBar 图标文字颜色

ios - 如何在 Swift 中显示文档目录中的贴纸

ios - 如何连续检查 AVAudioplayer 是否已在 Swift 中播放完毕?

ios - 即使数据库 FMDB Swift 中有数据,结果集也返回 nil

ios - 有人可以为我提供 "refreshObject:mergeChanges:YES"的说明吗?

ios - 在没有 Apple 开发者帐户的情况下将 Apache Cordova 应用程序部署到 iPad

swift 错误 : cannot convert value of type B to type A in coercion

ios - 从 ios 库中的视频获取持续时间和创建日期