CoreDataで、値を追加したいけど、重複する内容があったらやだなあ。というときに使えそうなメソッドです。
重複している値があったら重複しているオブジェクト(NSManagedObject)を返します。
重複していないときはNULLを返します。
今回は値はNSStringとしました。
- (NSManagedObject *)checkDupulicationInEntity:(NSString *) entityName withKey:(NSString *)keyString withValue:(NSString *)valueString{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:entityName];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K = %@", keyString, valueString];
[fetchRequest setPredicate:predicate];
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
if (results.count > 0) {
return [results objectAtIndex:0];
}
return NULL;
}
実行するときはこんなかんじで使う
// keyがhogeで、値がhogehogeのものに対して、重複があるかないか見る。
// エンティティはHogeという名前のNSManagedObjectのサブクラスを想定。
NSManagedObject * checkForDuplicate = [self checkDupulicationInEntity:NSStringFromClass([Hoge class]) withKey:@"hoge" withValue:@"hogehoge"];
if (regionCheckForDuplicate == NULL) {
// 重複がない場合はここに処理を書く
}else{
// 重複があった場合はここに処理を書く
NSLog(@"重複 : %@", [checkForDuplicate description]);
}