如何从Xcode中删除手机核心数据中的所有条目?

时间:2015-02-11 04:12:34

标签: xcode core-data

我想在运行我的应用程序时不时删除iphone核心数据中的所有条目。

我只想查看我的保存工作流程是否有效,但我不想以编程方式执行此操作。

我的意思是,是否有来自Xcode的命令/按钮,发送消息以重置从xcode运行的应用程序的Core Data条目?

由于

1 个答案:

答案 0 :(得分:1)

我认为没有任何功能可以直接从Xcode执行。

这就是我的所作所为:

如果你在模拟器中,你可以去查找SQLite文件并打开它,然后删除你想要的条目。 (请注意,如果您的应用必须关闭,则由于托管对象上下文将缓存您删除的内容,因此您将收到核心数据错误。)

在设备中,重置数据库的更快方法是直接删除文件。 如果您的核心数据代码在启动时无法找到该文件,则会处理持久性存储的创建。您可以使用您喜欢的任何应用程序(即imazing.com)进入手机并删除sql文件,然后从头开始。 希望它有所帮助。

我有这个代码来清理实体,记住内存压力只加载ObjectId和其他一些调整。当您想要移除到许多对象时,核心数据很糟糕。使用1到n关系进行删除的级联规则也是一个很好的解决方案。

- (BOOL) resetEntity:(NSString*)entityName
       withPredicate:(NSPredicate*)predicate
inManagedObjectContext:(NSManagedObjectContext*)context
            andError:(NSError **)error
{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:context]];
    [fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID to optimize.
    fetchRequest.resultType = NSManagedObjectIDResultType;
    [fetchRequest setFetchBatchSize:20]; //reduce memory usage
    
    if (predicate)
    {
        [fetchRequest setPredicate:predicate];
    }
    
    NSError * fetchError = nil;
    NSArray * objects = [context executeFetchRequest:fetchRequest error:&fetchError];
    
    if (fetchError)
    {
        DDLogError(@"ERROR: Core Data Reset %@ : %@", entityName, fetchError);
        *error = fetchError;
        return NO;
    }
    
    for (NSManagedObjectID * objectID in objects)
    {
        [context deleteObject:[context objectWithID:objectID]];
    }
    
    NSError *saveError = nil;
    [context save:&saveError];
    if (saveError) {
        NSLog(@"ERROR: Core Data Reset %@ : %@", entityName, fetchError);
        *error = saveError;
        return NO;
    }
    return YES;
}