Получить все значения атрибута через NSPredicate в CoreData - PullRequest
1 голос
/ 11 марта 2012

Этот вопрос будет звучать как новичок, но я рассмотрел все темы для своего решения, которое все еще остается проблемой для меня. Таким образом, у меня есть объект «LookUp», который имеет атрибут «descrip». Теперь мой вопрос: я хочу получить все значения атрибута «descrip».

До сих пор я использовал все эти запросы:

[NSPredicate predicateWithFormat:@"descrip == %@",[NSNumber numberWithInt:1]];
[NSPredicate predicateWithFormat:@"descrip == %@",@"descrip"];
[NSPredicate predicateWithFormat:@"descrip == %@",[NSNumber numberWithBool:YES]];

если я запускаю запрос

[NSPredicate predicateWithFormat:@"descrip == %@",@"Art Gallery"];

возвращает мне массив со значениями, связанными с «Художественной галереей». Атрибут «descrip» содержит 250 значений, например «Художественная галерея».

Пожалуйста, помогите. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 11 марта 2012

NSPredicate используется для ограничения ваших результатов сущностями, которые придерживаются определенного ограничения - как вы сказали, descrip == @ "Art Gallery" вернет все сущности, которые имеют Атрибут decrip установлен в Галерея искусств .

В вашем случае вы не хотите ограничивать сущности в вашем запросе. Просто выполните ваш запрос без предикатов, и все объекты будут возвращены. Теперь просто зациклите сущности и получите все значения descrip в NSMutableSet или NSMutableDictionary , и у вас есть список descrip значения.

1 голос
/ 19 ноября 2013

Возможно, вы хотите изменить запрос на выборку, а не предикат. См. «Извлечение отличительных значений» в основных фрагментах данных Apple .

NSManagedObjectContext *context = // Get the context.

NSEntityDescription *entity = [NSEntityDescription entityForName:@"LookUp" inManagedObjectContext:context];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setResultType:NSDictionaryResultType];
[request setReturnsDistinctResults:YES];
[request setPropertiesToFetch:@[@"descrip"]];

// Execute the fetch.
NSError *error;
id requestedValue = nil;
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
    // Handle the error.
}
0 голосов
/ 27 сентября 2013

Вы также можете установить запрос

[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:
  [NSArray arrayWithObject: @"descrip"]; 

Но вам все равно придется зацикливаться на массиве результатов, чтобы получить только значения описаний.

...