如何从 Xcode 中删除我的 phone 上核心数据中的所有条目?
How to delete all entries in Core Data on my phone from Xcode?
我想在我 iphone 我的应用程序 运行 的时候删除我的核心数据中的所有条目。
我只想检查我的保存工作流程是否正常,但我不想以编程方式进行。
我的意思是,是否有来自 Xcode 的 command/button 发送消息以重置来自 xcode 的应用程序 运行 的核心数据条目?
谢谢
我认为没有任何功能可以直接从 Xcode 执行此操作。
我是这样做的:
如果你在模拟器中,你可以去寻找 SQLite 文件并打开它,然后删除你想要的条目。 (请记住,您的应用程序必须关闭,否则您将收到核心数据错误,因为托管对象上下文将缓存您删除的内容)。
在设备中,重置数据库的更快方法是直接删除文件。
如果您的核心数据代码在开始时找不到文件时处理持久存储的创建。您可以使用您喜欢的任何应用程序(即 imazing.com)进入您的 phone 并删除 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;
}
我想在我 iphone 我的应用程序 运行 的时候删除我的核心数据中的所有条目。
我只想检查我的保存工作流程是否正常,但我不想以编程方式进行。
我的意思是,是否有来自 Xcode 的 command/button 发送消息以重置来自 xcode 的应用程序 运行 的核心数据条目?
谢谢
我认为没有任何功能可以直接从 Xcode 执行此操作。
我是这样做的:
如果你在模拟器中,你可以去寻找 SQLite 文件并打开它,然后删除你想要的条目。 (请记住,您的应用程序必须关闭,否则您将收到核心数据错误,因为托管对象上下文将缓存您删除的内容)。
在设备中,重置数据库的更快方法是直接删除文件。 如果您的核心数据代码在开始时找不到文件时处理持久存储的创建。您可以使用您喜欢的任何应用程序(即 imazing.com)进入您的 phone 并删除 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;
}