您知道如何在更改实体结构时重置iPhone模拟器上的coredata商店吗?
当我创建的核心数据存储的新版本与我上次在iPhone上运行的版本不同时,是否需要执行类似的过程?如果是的话,请怎么样?
由于
答案 0 :(得分:9)
为方便起见,在您编写通过应用程序删除持久存储的方法之前,您可以通过电话删除应用程序。 (将手指放在主屏幕上,直到图标变得晃动,然后单击应用上的x。)然后将手机连接到Mac,选择产品>在XCode中运行,它将在手机上重新安装您的应用程序,但数据目录为空。
对于部署,当然,如果您在部署后更改数据模型(假设您愿意),则需要提供一种方法来执行此操作而不删除应用程序。数据迁移是最佳选择,但如果所有其他方法都失败,则删除持久性存储文件。在这之前最好提示用户批准。如果他们有重要的数据,他们可能会拒绝并且可能会返回旧版本的应用程序以查看数据并手动迁移,或者他们可以等到您发布修复数据迁移错误的2.0.1版本。
答案 1 :(得分:6)
以下是我用来重置App内容的例程。它会删除商店和存储的任何其他文件。
- (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];
}
但请注意,在许多情况下,最好在更改模型时迁移商店,而不是删除它。
答案 2 :(得分:1)
在/Users/username/Library/Application Support/iPhone Simulator/4.3.2
中找到您的应用(iOS版可能不同)并删除.sqlite
文件
答案 3 :(得分:0)
您可以查看在安装时发送到persistentStoreCoordinator的路径,并删除该文件。通常我采用的方法是将存储设置为自动迁移,如果失败,我会删除存储并再次尝试创建将使用现在空路径的persistentStoreCoordinator。
不要忘记您可能需要重新填充旧数据库中存储的任何内容。