コアデータに多数のjsonフィードを格納する必要があります。アプリが読み込まれるまでに時間がかかりすぎるので、一度に呼び出すことはできないほど多くのフィードがあります。アプリ起動時に最も重要なものを呼び出し、残りの部分をアプリ全体に分割します。しかし、私はまた、これらをコアデータに格納する必要があります。NSPredicateを使用して、データを挿入するときにエンティティに値が既に含まれているかどうかを確認します。
最初のビューは、テーブルビューであり、その中に名前があります。名前をクリックすると、次のビューに送られます。そこにはテキストと写真がいくつかあります。したがって、2番目のビューがロードされると、Webサービスにリクエストを送信し、サービスの回答をコアデータに保存します。
同じtableviewcellを2回クリックすると、呼び出されたサービスの情報がCore Dataに2回書き込まれ、重複値が作成されます。私はこれを避けたい。
私のしたいことは、自分のエンティティにすでに一意の値が含まれているかどうかを確認することです。存在する場合は、コアデータに保存しないでください。そうでない場合は、保管してください。ここで
は私の方法です:
-(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;
}
誰もが、私はこれを達成する方法のアイデアを持っていますか?述語が間違っていますか?述語が真であるかどうかを確認するにはどうすればよいですか?
助けていただけたら幸いです!