NSFetchRequest の setReturnsDistinctResults に YES を渡せばよい。
具体的なコードは、以下の通り
今回は例として、name が重複しているデータから重複を取り除いてデータを取得する処理を行う。
// NSFetchRequest は、検索条件などを保持するオブジェクト
// 後続処理で、このインスタンスに色々と検索条件を設定する。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// 検索対象エンティティを指定する。
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Theme"
inManagedObjectContext:_managedObjectContext];
[fetchRequest setEntity:entity];
// ソートを設定
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
// コードで絞り込んだ値を取得する
NSDictionary *entityProperties = [entity propertiesByName];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"name"]]];
[fetchRequest setReturnsDistinctResults:YES]; // ← ここで指定する
[fetchRequest setResultType:NSDictionaryResultType];
NSError *error;
NSArray *fetchResults = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchResults == nil) {
// Handle the error.
NSLog(@"fetch error.");
}
これで、NSArray に重複が除去されたデータが格納されている。
0 件のコメント:
コメントを投稿