在开发过程中替换核心数据模型而不迁移数据(El Capitan 上的 OSX xcode 8.1)
Replace core data model whilst in development without migrating the data (OSX xcode 8.1 on El Capitan)
我对 OSX 和 xCode 开发还很陌生,所以非常感谢您的帮助。我正在开发一个将数据存储在核心数据中的 OSX 应用程序,我想清除核心数据模型以便重新生成它而无需进行迁移,因为我没有将该应用程序推送到任何设备然而。我正在逐步尝试并添加实体以及更改 attributes/etc 现有实体。
当我向已创建的实体添加属性后,通过 xcode 运行 应用时出现此错误:
The managed object model version used to open the persistent store is
incompatible with the one that was used to create the persistent
store.
我已经查看了这些问题和答案,但我没有让它们发挥作用:
Deleting CoreData store on OS X?
How do I overcome XCode object model version error?
似乎最有可能解决此问题的答案(对我不起作用)是转至 ~/Library/Developer/Xcode/DerivedData 并删除那里的应用程序文件夹。 DerivedData 文件夹确实包含一个以我的应用程序名称命名的文件夹,当我删除它并在 xCode 中打开项目时,它确实会重新生成。事实上,我已经删除了 DerivedData 文件夹中的所有文件夹,但问题仍然存在。
有人知道如何在 OSX xcode 8.1 运行 El Capitan 上解决这个问题吗?我的应用程序的部署目标是 macOS 10.11.
假设这不是基于文档的应用程序,Core Data 持久存储文件将位于 ~/Library/Containers/[your bundle ID]/Data/Documents/
。您可以删除整个容器或特定文件。对于基于文档的应用程序,当然,它会在文档中。
在 iOS 上您只需删除该应用程序,但在 OS X 上有点不同。
根据评论等,我分享了我发现的两种解决此问题的方法。
选项 1 - 添加应用程序沙箱功能。
将 'app sandbox' 的功能添加到您的应用程序。然后数据存储被移动到 ~/Library/Containers/<appName>
。当您想要重新生成核心数据存储以解决版本控制问题时,您可以删除该文件夹。
选项 2 - 通过代码找出核心数据持久存储位置,然后删除这些文件。
根据 Tom Harrington 的说法:我的应用程序使用了一个 NSPersistentStoreCoordinator
,正如您在我的 AppDelegate 的核心数据设置中看到的那样。我通过 AppDelegate.swift
中的这个获得了持久存储的 url(我在发生核心数据版本控制错误时发生崩溃的地方之前添加了这个):
for store in (coordinator?.persistentStores)!
print("store url: \(store.url)")
}
这表明我的应用程序的持久性故事的位置是 ~/Library/Application Support/com.apple.toolsQA.CocoaApp_CD/TableViewPlayGround.storedata
。仅供参考:我的应用程序包 ID 是 co.uk.gamba.TableViewPlayGround
,所以这意味着当 运行 通过 xcode 时,数据存储不会保存在与我的应用程序包相关的文件夹中。每次我删除该文件并在 xcode 中重新启动应用程序时,核心数据模型都会被无误地替换。
我对 OSX 和 xCode 开发还很陌生,所以非常感谢您的帮助。我正在开发一个将数据存储在核心数据中的 OSX 应用程序,我想清除核心数据模型以便重新生成它而无需进行迁移,因为我没有将该应用程序推送到任何设备然而。我正在逐步尝试并添加实体以及更改 attributes/etc 现有实体。
当我向已创建的实体添加属性后,通过 xcode 运行 应用时出现此错误:
The managed object model version used to open the persistent store is incompatible with the one that was used to create the persistent store.
我已经查看了这些问题和答案,但我没有让它们发挥作用:
Deleting CoreData store on OS X?
How do I overcome XCode object model version error?
似乎最有可能解决此问题的答案(对我不起作用)是转至 ~/Library/Developer/Xcode/DerivedData 并删除那里的应用程序文件夹。 DerivedData 文件夹确实包含一个以我的应用程序名称命名的文件夹,当我删除它并在 xCode 中打开项目时,它确实会重新生成。事实上,我已经删除了 DerivedData 文件夹中的所有文件夹,但问题仍然存在。
有人知道如何在 OSX xcode 8.1 运行 El Capitan 上解决这个问题吗?我的应用程序的部署目标是 macOS 10.11.
假设这不是基于文档的应用程序,Core Data 持久存储文件将位于 ~/Library/Containers/[your bundle ID]/Data/Documents/
。您可以删除整个容器或特定文件。对于基于文档的应用程序,当然,它会在文档中。
在 iOS 上您只需删除该应用程序,但在 OS X 上有点不同。
根据评论等,我分享了我发现的两种解决此问题的方法。
选项 1 - 添加应用程序沙箱功能。
将 'app sandbox' 的功能添加到您的应用程序。然后数据存储被移动到 ~/Library/Containers/<appName>
。当您想要重新生成核心数据存储以解决版本控制问题时,您可以删除该文件夹。
选项 2 - 通过代码找出核心数据持久存储位置,然后删除这些文件。
根据 Tom Harrington 的说法:我的应用程序使用了一个 NSPersistentStoreCoordinator
,正如您在我的 AppDelegate 的核心数据设置中看到的那样。我通过 AppDelegate.swift
中的这个获得了持久存储的 url(我在发生核心数据版本控制错误时发生崩溃的地方之前添加了这个):
for store in (coordinator?.persistentStores)!
print("store url: \(store.url)")
}
这表明我的应用程序的持久性故事的位置是 ~/Library/Application Support/com.apple.toolsQA.CocoaApp_CD/TableViewPlayGround.storedata
。仅供参考:我的应用程序包 ID 是 co.uk.gamba.TableViewPlayGround
,所以这意味着当 运行 通过 xcode 时,数据存储不会保存在与我的应用程序包相关的文件夹中。每次我删除该文件并在 xcode 中重新启动应用程序时,核心数据模型都会被无误地替换。