Swift Core 数据无法第二次存储数据:Cocoa 错误 1560

Posted

技术标签:

【中文标题】Swift Core 数据无法第二次存储数据:Cocoa 错误 1560【英文标题】:Swift Core data can't store data second time : Cocoa error 1560 【发布时间】:2017-03-20 12:15:31 【问题描述】:

我有核心数据和其中的三个对象。假设我有对象:Parent, Child, Item

ParentSet<Child>ChildSet<Item>,换句话说,

Parent have one to many relationship with Child
Child have one to many relationship with Item

Parent: 
  - var childs : Set<Child>

Child:
  - var items : Set<Item>

为了在里面存储数据,我有方法:

func insert(parent : Parent)  

    // remove all old Childs
    parent.removeChild(Parent.childs)

    for data in datas 

        let child = self.newChildFromData(data)

        for data2 in datas2 

            let item = self.newItemFromData2(data2)

            child.addItem(item)
        

        parent.addChild(child)
    

    do 
       try managedObjectContext.save()
     catch 
        print(error.debugDescription)
    

注意 这不是真正的代码,但它足以理解问题。

当我第一次运行方法时(空数据库),它工作正常,但是当我第二次运行它时,它给我错误

The operation couldn’t be completed. (Cocoa error 1560.)

Error Domain=NSCocoaErrorDomain Code=1560 "(null)" UserInfo=NSDetailedErrors=(
"Error Domain=NSCocoaErrorDomain Code=1570 \"The operation couldn\U2019t be completed. (Cocoa error 1570.)\" UserInfo=NSValidationErrorKey=server, NSLocalizedDescription=The operation couldn\U2019t be completed. (Cocoa error 1570.), NSValidationErrorObject...

那可能是什么?

【问题讨论】:

1560 表示有多个错误; 1570 是“NSValidationMissingMandatoryPropertyError”的值,这可能意味着您有一个带有验证约束的属性,这使得它成为强制性的,但您的代码将其设置为 nil。 是的,我读到了这一点,但是为什么当我第一次运行方法时它没有错误地存储元素,但第二次使用相同的对象时发生了这个错误?我怀疑删除旧值有问题,但我不知道是什么。 您是否有每个孩子都必须有父母的约束? parent.removeChild(parent.childs) 将意味着子对象不再有父对象(它实际上并没有删除子对象)。 是的,现在我明白了,这是真的。我有强制性的父字段。当我删除关系时,这是无效的实体。 【参考方案1】:

如果您在更改代码以满足这两个要求后遇到错误,请尝试清理您的构建并从您的 iPhone 模拟器/iPhone 设备中删除应用程序。也可以参考图书馆Core Data Constants Reference

另外你也可以参考Core Data Model Versioning and Data Migration Programming Guide。它将帮助您迁移核心数据模型。

【讨论】:

是的,如果我删除我的应用程序并再次运行它,它可以工作,但是当我运行代码以重新加载我的数据时,它再次出现错误。这不是模型版本控制或转换错误。我需要按需重新加载数据。

以上是关于Swift Core 数据无法第二次存储数据:Cocoa 错误 1560的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 第二次加载后 Tableview 无法正确重新加载

Swift 4:UITableViewCell 在初始加载时不会显示数据,但会在第二次加载时加载

无法保存数据 --- Swift、IOS、Core 数据 --- 线程 1:信号 SIGABRT

模型和数据存储引擎的 Swift Core Data [关闭]

第二次调用函数时未调用 Swift 完成处理程序

在 Swift Core Data 中对存储的数据模型提取进行排序