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




nsfetchedresultscontroller (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);

Я пытаюсь настроить NSFetchRequest на основные данные, чтобы получить уникальные значения для определенного атрибута в сущности. т.е.

лицо со следующей информацией:

  name | rate | factor |
_______|______|________|
John   |  3.2 |    4   |
Betty  |  5.5 |    7   |
Betty  |  2.1 |    2   |
Betty  |  3.1 |    2   |
Edward |  4.5 |    5   |
John   |  2.3 |    4   |

Как бы я настроил запрос на возврат массива только с Джоном, Бетти, Эдвардом?


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

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

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

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

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

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

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








nsfetchrequest