【问题标题】:How to delete all entries in Core Data on my phone from Xcode?如何从 Xcode 中删除手机上 Core Data 中的所有条目?
【发布时间】:2015-04-11 08:37:36
【问题描述】:

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

我只想检查我的保存工作流程是否正常,但我不想以编程方式进行。

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

谢谢

【问题讨论】:

  • 您可以随时从应用中删除 .sqlite 文件。

标签: xcode core-data


【解决方案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;
}

【讨论】:

  • 感谢您的回复,但是在设备上,您的方法比从手机中删除应用程序有什么好处吗?
  • 如果你只有分贝,根本没有优势。但是,如果您有更多不想删除的文件(例如图像、文件等),它可能会很有用。
  • 嗯好的。然后我想我可能有一个临时按钮以编程方式执行此操作,因为如果我必须一直这样做,您的解决方案可能会有点长。但是,很高兴知道我们也可以这样做。
  • 刚刚更新了我的答案,这很糟糕,因为我正在使用我的手机?抱歉。但是,如果您想手动操作,请记住一些好主意。
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
相关资源
最近更新 更多