【问题标题】:The model configuration used to open the store is incompatible with the one that was used to create the store用于打开商店的模型配置与用于创建商店的模型配置不兼容
【发布时间】:2017-03-13 10:07:17
【问题描述】:

嘿,我一直在线上收到此 BAD Access

try managedContext.save()

代码运行完美,直到它尝试保存我的价值。我认为这可能是因为我使用的是实体的“副本”而不是实际的实体。但这是必要的,因为您不能在代码中实际编辑原始模型。所以我所要做的就是在尝试“.save()”时停止这种不良访问,并且我很好。它位于代码的最后 4 行。

所以基本上在使用时尝试 managedContext.save()。我创建了一个会打印错误的捕获。所以我把“!” “try”的符号,这样我就可以看到应用程序抛出错误的原因,这就是我得到的

致命错误:“试试!”表达式意外引发错误:Error Domain=NSCocoaErrorDomain Code=134020“用于打开商店的模型配置与用于创建商店的模型配置不兼容。”

Picture of Error

代码:

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

var properties0 = Array<NSAttributeDescription>()

let playersList0 = NSEntityDescription.entityForName("PlayersList1", inManagedObjectContext: managedContext)

let copy = playersList0!.copy() as! NSEntityDescription

let contentTypeAttribute0 = NSAttributeDescription()
contentTypeAttribute0.name = "firstName"
contentTypeAttribute0.attributeValueClassName = "firstName"
contentTypeAttribute0.attributeType = .StringAttributeType
contentTypeAttribute0.optional = true
properties0.append(contentTypeAttribute0)


copy.properties = properties0

let playerslistCopyto = NSManagedObject(entity: copy, insertIntoManagedObjectContext: managedContext)

playerslistCopyto.setValue("John", forKey: "firstName")



do {
    try managedContext.save()
} catch {
    print("Error") //prints Error everytime
}

这每次都会打印“错误”作为捕获。我基本上只需要找出如何保存“副本”

【问题讨论】:

    标签: ios swift xcode core-data


    【解决方案1】:

    抱歉,这是一条旧消息,但似乎没有很多有用的答案。 我上周确实遇到了类似的错误:

    Error Domain=NSCocoaErrorDomain Code=134020 "The model configuration used to open the store is incompatible with the one that was used to create the store." UserInfo={problemObject=<CachedWeightedRegularJourney: 0x6000023c5130> (entity: CachedWeightedRegularJourney; id: 0x6000002605e0 <x-coredata:///CachedWeightedRegularJourney/t05BA08BA-E646-44D9-8B36-713C5B4499629>; data: {
        destinationURN = "urn:trainline:generic:loc:1183";
        originURN = "urn:trainline:generic:loc:4916";
        weight = 1;
    })}
    

    在我的案例中,根本原因是在我的模型中添加新实体之前,我没有看到我的模型包含多个配置。因此,仅添加实体而不将其添加到正确的模型配置中就会导致保存失败。保存时似乎发生的情况是协调器丢失了,因为它找不到将保存更改的持久存储。

    在我的情况下的解决方案: 我将新实体拖放到模型编辑器中的正确配置中。

    【讨论】:

      【解决方案2】:

      您必须编辑过模型文件。您需要进行自动迁移。 The Ray Wenderlich tutorial 就足够了。

      您从中读取的 NSEntityDescription 不是您现在用来尝试保存的那个,Core Data 正在阻止您创建未迁移的混乱。您是否在某个地方编辑了模型名称或更改了它的数据类型?

      【讨论】:

      • 名为 .xcdatamodeld 的文件我替换为与之前完全相同的名称,所以我不确定这是否是问题,但我现在正在查看教程,谢谢
      • 当您从现有的保存文件中读取时,模型的定义也在那里定义。这是 Core Data 知道不匹配的地方。
      【解决方案3】:

      出现此错误是因为您当前尝试访问的数据库模型不同,它很可能需要迁移。发生这种情况是因为您使用模型创建并保存了数据,然后对其进行了编辑(例如添加、删除或重命名),然后尝试在不执行迁移的情况下访问数据存储。我的建议是,如果您还没有发布应用程序,请删除数据库(卸载应用程序)并重试。您可以做的另一件事是告诉核心数据进行轻量级迁移。苹果有一个很好的教程,代码为here

      【讨论】:

      • 好的,我还没有发布应用程序,我重新启动并多次从手机中删除了我的应用程序,我现在正在查看 MigicalRecord。另外,您是否有一个很好的链接可以访问它的代码设置。我还没听说过 MagicalRecord @Sealos
      • 对不起!我虽然在你的帖子中读到了魔法记录,我的错。您可以在此处详细了解仅使用核心数据的轻量级迁移:developer.apple.com/library/content/documentation/Cocoa/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      相关资源
      最近更新 更多