LoginSignup
12
12

More than 5 years have passed since last update.

CoreData : エンティティ内に重複があるか判別するメソッド

Posted at

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]);
}
12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12