如何删除核心数据持久存储 [英] How to remove a core data persistent store

查看:170
本文介绍了如何删除核心数据持久存储的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要删除我的永久存储(做对象的对象是不实际的,因为我有超过100,000个对象)。我试过这个:

I need to delete my persistent store (doing it object by object is not practical because I have over 100,000 objects). I've tried this:

- (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];

}

但我遇到这个错误,当我尝试插入实体存储之后:

But I get this error when I try to insert entities into the store afterwards:

This NSPersistentStoreCoordinator has no persistent stores.  It cannot perform a save operation.

更新:
我尝试释放MOC和MOM删除持久存储,但我仍然得到相同的错误。

Update: I tried releasing the MOC and MOM before removing the persistent store but I still get the same error.

推荐答案

这里是如何做一个重置数据 apps:

Here is how I do a "reset data" function in several apps:

- (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协调器。然后在下一个核心数据调用链使用单例 - 惰性样式构造函数透明地重建如:

Basically I just release the CoreData chain, then delete the persistentStore file. That's what you are trying to do, without using removePersistentStore, which I do not care since I will just rebuild the persistentStore coordinator later. Then at next core data call the chain is rebuilt transparently using singleton-lazy-style constructors like :

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

这篇关于如何删除核心数据持久存储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆