animalTypeという属性を持つエンティティがあるとしましょう。コアデータ内には、これらのエンティティが10,000個あり、さまざまな動物の種類が不明な数あります。犬、猫、鳥など。コアデータに各動物タイプをフェッチして次のような配列を返すように指示できますか?
@[Dog, Cat, Bird, Fish, ...]
エンティティの配列をフェッチしたくありません。一意のリストが必要なだけですanimalTypes
。いいえanimalType
、繰り返す必要はありません。
animalTypeという属性を持つエンティティがあるとしましょう。コアデータ内には、これらのエンティティが10,000個あり、さまざまな動物の種類が不明な数あります。犬、猫、鳥など。コアデータに各動物タイプをフェッチして次のような配列を返すように指示できますか?
@[Dog, Cat, Bird, Fish, ...]
エンティティの配列をフェッチしたくありません。一意のリストが必要なだけですanimalTypes
。いいえanimalType
、繰り返す必要はありません。
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Animal"];
request.returnsDistinctResults = YES;
request.resultType = NSDictionaryResultType;
request.propertiesToFetch = @[@"animalType"];
NSArray *fetchedObjects = [self.managedObjectContext
executeFetchRequest:request error:nil];
NSArray *result = [fetchedObjects valueForKeyPath:@"animalType"];
// @[@"Dog", @"Cat", @"Fish" ...]
はい、とを組み合わせたNSFetchRequest
のメソッドが必要になります。基本的に、フェッチはディクショナリの配列を返し、それらのディクショナリには、フェッチする特定のプロパティに対応するキーと値のペアが含まれます。この場合、各ディクショナリには1つのキー、、およびそのキーの個別の値が含まれます。それをあなたが説明するような配列に変換するのは簡単でしょう。setReturnsDistinctResults:
setPropertiesToFetch:
setResultType: NSDictionaryResultType
animalType