Swift:保存到核心数据上下文时出错

时间:2015-08-17 16:51:57

标签: ios swift core-data persistence

我的应用包含两个由标签栏控制器管理的视图。

第一个视图包含一个从服务器下载数据并将其解析为对象的按钮。完成之后,我基于这些对象创建核心数据实体。无论何时按下按钮,都会删除以前的实体以避免添加相同的数据

第二个视图包含用于显示检索到的核心数据实体数据的表视图。

这是我保存数据的方法:

 func saveData()
    {

        var context:NSManagedObjectContext = self.managedObjectContext!
        var error: NSError?
        let entityDescription =
        NSEntityDescription.entityForName("Medicine",
            inManagedObjectContext: managedObjectContext!)

        for element in self.loadedArray {

            var medicine = Medicine(entity: entityDescription!,
                insertIntoManagedObjectContext: managedObjectContext)

            medicine.name = element.name
            medicine.desc = element.desc


            var error: NSError?

            context.save(&error)
            println(medicine)

        }

}

这就是我删除数据的方式

    func deleteData() {


    let fetchRequest = NSFetchRequest(entityName: "Medicine")


    let fetchedEntities = self.managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as! [Medicine]

    for entity in fetchedEntities {
        self.managedObjectContext!.deleteObject(entity)
    }

    self.managedObjectContext!.save(nil)
}

我从已下载数据中的loadedArray准备就绪后保存数据

 var loadedArray:[Drug] = [] {
    didSet {
        self.saveData()
    }
}

行为是不确定的,但错误通常在我保存数据时发生,然后转到表视图然后返回删除/保存新数据。这是崩溃发生的时候,这是错误:

enter image description here

我知道这个错误相对难以重现,所以我认为最好的方法是提供项目链接 https://github.com/thedc89/MedApp(查看最新提交)

提前致谢

编辑:

这是第二个视图中的获取结果控制器:

lazy var fetchedResultsController: NSFetchedResultsController = {
    let medicinesFetchRequest = NSFetchRequest(entityName: "Medicine")
    let primarySortDescriptor = NSSortDescriptor(key: "name.order", ascending: true)

    medicinesFetchRequest.sortDescriptors = [primarySortDescriptor]

    let frc = NSFetchedResultsController(
        fetchRequest: medicinesFetchRequest,
        managedObjectContext: self.managedObjectContext!,
        sectionNameKeyPath: "name",
        cacheName: nil)

    frc.delegate = self

    return frc
    }()

此外,由于某种原因,github项目上似乎缺少datamodel,这真的很奇怪。但是,如果它实际上丢失了,我认为它不会保存任何数据,但它是第一次触摸按钮时发生

1 个答案:

答案 0 :(得分:3)

下载项目后,看起来HttpUtility.UrlDecode(value)缺失,即使它包含在Xcode项目中。关于SO的其他答案似乎确认了同一错误的类似问题:herehere

此外,拥有名为xcdatamodel的属性非常通用,可以在内部使用。尝试将其更改为order或更具描述性的内容以避免冲突。