【发布时间】:2011-11-14 03:02:55
【问题描述】:
您知道在更改实体结构后如何在 iPhone 模拟器上重置 coredata 存储吗?
当我创建了一个不同于我上次在 iPhone 上运行的新版本的核心数据存储时,我是否需要执行类似的过程?如果有,请问怎么做?
谢谢
【问题讨论】:
标签: iphone ios core-data core-data-migration
您知道在更改实体结构后如何在 iPhone 模拟器上重置 coredata 存储吗?
当我创建了一个不同于我上次在 iPhone 上运行的新版本的核心数据存储时,我是否需要执行类似的过程?如果有,请问怎么做?
谢谢
【问题讨论】:
标签: iphone ios core-data core-data-migration
为了方便起见,除非您编写了一种通过您的应用删除永久存储的方法,否则您只需从手机上删除该应用即可。 (将手指放在主屏幕上,直到图标摆动,然后单击应用程序上的 x。)然后将手机连接到 Mac,选择 Product > Run in XCode,它将在手机上重新安装您的应用程序,但为空数据目录。
当然,对于部署,如果您在部署后会更改数据模型(假设您会),那么您需要想出一种方法来在不删除应用程序的情况下执行此操作。数据迁移是最好的选择,但如果所有其他方法都失败,请删除持久存储文件。最好在这样做之前提示用户的批准。如果他们有重要数据,他们可以拒绝,并可能让您的应用程序的旧版本返回以查看数据并手动迁移,或者他们可以等到您发布修复数据迁移错误的 2.0.1 版本。
【讨论】:
这是我用来重置我的应用内容的例程。它会删除存储和存储的任何其他文件。
- (void) resetContent
{
NSFileManager *localFileManager = [[NSFileManager alloc] init];
NSString * rootDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSURL *rootURL = [NSURL fileURLWithPath:rootDir isDirectory:YES];
NSArray *content = [localFileManager contentsOfDirectoryAtURL:rootURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsSubdirectoryDescendants error:NULL];
for (NSURL *itemURL in content) {
[localFileManager removeItemAtURL:itemURL error:NULL];
}
[localFileManager release];
}
如果你只想擦除存储,因为你知道它的文件名,你可以避免枚举文档目录内容:
- (void) resetContent
{
NSFileManager *localFileManager = [[NSFileManager alloc] init];
NSString * rootDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSURL *rootURL = [NSURL fileURLWithPath:rootDir isDirectory:YES];
NSURL *storeURL = [rootURL URLByAppendingPathComponent:@"myStore.sqlite"];
[localFileManager removeItemAtURL:storeURL error:NULL];
[localFileManager release];
}
但请注意,在许多情况下,最好在更改模型时迁移您的商店,而不是删除它。
【讨论】:
在/Users/username/Library/Application Support/iPhone Simulator/4.3.2(iOS版本可能不同)中找到您的应用并删除.sqlite文件
【讨论】:
您可以在设置时查看发送到 persistentStoreCoordinator 的路径,然后删除该文件。通常我采取的方法是将商店设置为自动迁移,如果失败,我会删除商店并再次尝试创建将使用现在为空路径的 persistentStoreCoordinator。
不要忘记您可能需要重新填充存储在旧数据库中的任何内容。
【讨论】: