我需要删除我的持久存储(逐个对象执行此操作并不实际,因为我有超过 100,000 个对象)。我试过这个:
- (IBAction)resetDatabase:(id)sender {
NSPersistentStore* store = [[__persistentStoreCoordinator persistentStores] lastObject];
NSError *error = nil;
NSURL *storeURL = store.URL;
// release context and model
[__managedObjectContext release];
[__managedObjectModel release];
__managedObjectModel = nil;
__managedObjectContext = nil;
[__persistentStoreCoordinator removePersistentStore:store error:nil];
[__persistentStoreCoordinator release];
__persistentStoreCoordinator = nil;
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
if (error) {
NSLog(@"filemanager error %@", error);
}
// recreate the stack
__managedObjectContext = [self managedObjectContext];
}
但是当我随后尝试将实体插入商店时,出现此错误:
This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.
Update:我尝试在删除持久存储之前释放 MOC 和 MOM,但仍然遇到相同的错误。
以下是我在几个应用程序中执行“重置数据”功能的方法:
- (void)reset {
// Release CoreData chain
[_managedObjectContext release];
_managedObjectContext = nil;
[_managedObjectModel release];
_managedObjectModel = nil;
[_persistentStoreCoordinator release];
_persistentStoreCoordinator = nil;
// Delete the sqlite file
NSError *error = nil;
if ([fileManager fileExistsAtPath:_storeURL.path])
[fileManager removeItemAtURL:_storeURL error:&error];
// handle error...
}
基本上我只是释放 CoreData 链,然后删除 persistenceStore 文件。这就是你想要做的,而不使用removePersistentStore
,我不在乎,因为我稍后会重建 persistenceStore 协调器。然后,在下一个核心数据调用中,使用单例惰性样式构造函数透明地重建链,例如:
- (NSManagedObjectModel *) managedObjectModel {
if (!_managedObjectModel)
_managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return _managedObjectModel;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)