CoreData получает различные значения атрибута

for i in $(seq 1 $END); do echo $i; done

edit: Я предпочитаю seq по сравнению с другими методами, потому что я действительно могу его запомнить;)

29
задан albertamg 9 August 2011 в 19:14
поделиться

3 ответа

Вы должны использовать резервное хранилище, чтобы помочь вам получить различные записи.

Если вы хотите получить массив только с Джоном, Бетти и Эдвардом, вот как вы это сделаете:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:self.managedObjectContext];

// Required! Unless you set the resultType to NSDictionaryResultType, distinct can't work. 
// All objects in the backing store are implicitly distinct, but two dictionaries can be duplicates.
// Since you only want distinct names, only ask for the 'name' property.
fetchRequest.resultType = NSDictionaryResultType;
fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"name"]];
fetchRequest.returnsDistinctResults = YES;

// Now it should yield an NSArray of distinct values in dictionaries.
NSArray *dictionaries = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
NSLog (@"names: %@",dictionaries);
71
ответ дан idmean 9 August 2011 в 19:14
поделиться

Посмотрите на Извлечение значений определенных свойств , нет необходимости использовать Set для получения различных значений.

5
ответ дан Alexandre L Telles 9 August 2011 в 19:14
поделиться

Вы пытаетесь использовать Базовые данные как процедурную базу данных, а не как менеджер графов объектов, как предполагал API, поэтому вы не найдете простого способа сделать это.

Нет прямого способа сделать это в Базовых данных, потому что Базовые данные связаны с объектами, а не со значениями. Поскольку управляемые объекты гарантированно являются уникальными, базовые данные не очень заботятся о значениях каждого объекта или о том, являются ли они дубликатами или значениями некоторых других объектов.

Чтобы найти уникальные значения:

  1. Выполните выборку по определенному значению . Это даст вам массив словарей с ключом name и значением самой строки имени.
  2. Для возвращенного массива в (1) используйте оператор набора множеств , чтобы вернуть набор уникальных значений.

Итак, что-то вроде:

NSSet *uniqueNames=[fetchedNameDicts valueForKeyPath:@"@distinctUnionOfSets.name"];

... который вернет набор объектов NSString с уникальным значением.

15
ответ дан TechZen 9 August 2011 в 19:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: