Мне нужно сохранить большое количество json-каналов в Core Data. Существует так много каналов, что я не могу их сразу вызвать, потому что загрузка приложения слишком долго. Поэтому я называю самые важные из них, когда приложение запускается, и делят остальные на протяжении всего приложения. Тем не менее, мне также нужно хранить их в Core Data.Используйте NSPredicate для проверки того, содержит ли объект уже значение при вставке данных
Первый вид - это просто табличное представление с именами в них. Когда вы нажимаете на имя, вы отправляетесь на следующее представление, где должны быть некоторые тексты и несколько изображений. Поэтому, когда загружается второе представление, я отправляю запрос в веб-службу и сохраняю ответ для службы в Core Data.
Случается, что если вы дважды щелкнете по той же таблице tableview, информация из вызываемой службы будет записана в Core Data дважды, создавая значения дубликатов. Я хочу избежать этого.
Что я хочу сделать, это проверить, содержит ли мой объект уже одно из уникальных значений. Если это так, не сохраняйте в Core Data. Если нет, сохраните его.
Вот мой метод:
-(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;
}
Кто-нибудь есть идея, как я могу добиться этого? Неправильно ли предикат? Как проверить, является ли предикат истинным или нет?
Любая помощь будет оценена!