我需要存储大量的JSON送入核心数据时,已经包含了价值。 Feed太多,我无法一次全部打电话给他们,因为应用加载需要很长时间。所以我会在应用程序启动时调用最重要的应用程序,并将其余的应用程序分开。但是,我还需要将这些商店存储到Core Data中。使用NSPredicate来检查,如果实体插入数据
第一种观点只是一个tableview中,在他们的名字。当你点击一个名字时,你会被发送到下一个视图,其中应该有一些文字和几张图片。因此,当第二个视图加载时,我向Web服务发送请求并将服务的答案存储在Core Data中。
会发生什么情况是,如果你点击两次相同tableviewcell,从所谓的服务信息将被写入到核心数据的两倍,创建重复的值。我想避免这种情况。
我想要做的是检查,如果我的实体已经包含了独特的价值之一。如果确实如此,则不要存储在核心数据中。如果没有,存储它。
这里是我的方法:
-(void)addImage:(NSManagedObjectContext *)context withImageUrl:(NSString *)imageUrl{
NSFetchedResultsController *fetchedResultsController = [self fetchObjectsFromEntity:@"Image" withContext:context andSortKey:@"imageUrl"];
[fetchedResultsController.fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"imageUrl contains[cd] %@" , imageUrl]];
if (//WHAT TO PUT HERE?) {
NSLog(@"Doesn't exist");
Image *image = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:context];
image.imageUrl = imageUrl;
}else{
NSLog(@"Already exists");
}
-(NSFetchedResultsController *)fetchObjectsFromEntity:(NSString *)entityName withContext:(NSManagedObjectContext *)context andSortKey:(NSString *)key{
NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:context];
[fetchRequest setEntity:entity];
if (key != nil) {
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:key ascending:YES];
NSArray *sortDescs = [[NSArray alloc]initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescs];
}
NSFetchedResultsController *fetchedResultController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:@"Root"];
if (![fetchedResultController performFetch:&error]) {
NSLog(@"Error: %@" , error);
}
return fetchedResultController;
}
任何人不会有我如何能够做到这一点的想法?谓词错了吗?如何检查谓词是否为真?
任何帮助,将不胜感激!