之前已经提出过这个问题,但没有描述的解决方案足以满足我的应用需求.
在我们设置的通信协议中,服务器在每次执行同步时发送一组新的客户.早些时候,我们一直作为一个plist存储.现在想要使用Core Data.
可能有数千个条目.单独删除每一个需要很长时间.有没有办法删除Core Data中特定表中的所有行?
delete from customer
Run Code Online (Sandbox Code Playgroud)
sqlite中的这个调用立即发生.在Core1中单独浏览每一个可能需要30秒才能在iPad1上完成.
关闭Core Data是合理的,即删除持久性存储和所有托管对象上下文,然后放入sqlite并对表执行delete命令?在此过程中没有其他活动正在进行,因此我不需要访问数据库的其他部分.
我-com.apple.CoreData.SQLDebug 1在我的应用程序方案中激活了Core Data调试器,并获得了一个名为Category的实体的以下结果,其中包含一个名为Image的关系实体:
主要上下文中的FetchRequest:
NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"Category"];
fr.relationshipKeyPathsForPrefetching = @[@"image"];
NSArray *results = [self.mainContext executeFetchRequest:fr error:nil];
for (Category *category in results) {
NSLog(@"%@", category.image.width);
}
Run Code Online (Sandbox Code Playgroud)
控制台日志显示未满足任何错误 - 自映像关系设置为预取以来的预期行为.
对子上下文的相同请求:
NSManagedObjectContext *privateMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[privateMOC setParentContext:self.mainContext];
[privateMOC performBlock:^{
NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"Category"];
fr.relationshipKeyPathsForPrefetching = @[@"image"];
NSArray *results = [privateMOC executeFetchRequest:fr error:nil];
for (Category *category in results) {
NSLog(@"%@",category.image.width);
}
}];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,控制台显示Core Data为每个图像(其中4个)执行故障.这是一个错误,预期的行为还是我错过了什么?