gpt4 book ai didi

objective-c - 如何删除核心数据持久存储

转载 作者:太空狗 更新时间:2023-10-30 03:40:54 27 4
gpt4 key购买 nike

我需要删除我的持久存储(一个对象一个对象地删除是不切实际的,因为我有超过 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.

更新:我尝试在删除持久存储之前释放 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 链,然后删除 persistentStore 文件。这就是您在不使用 removePersistentStore 的情况下尝试做的事情,我不在乎,因为我稍后会重建 persistentStore 协调器。然后在下一个核心数据调用中,使用单例惰性构造函数透明地重建链,例如:

- (NSManagedObjectModel *) managedObjectModel {
if (!_managedObjectModel)
_managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return _managedObjectModel;
}

关于objective-c - 如何删除核心数据持久存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5761416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com