2010-05-07 4 views
14

Так, глядя через Core Data Snippets, я нашел следующий код:Как получить отдельные значения в Core Data?

... 
[request setEntity:entity]; 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctValues:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"<#Attribute name#>"]]; 

// Execute the fetch 
NSError *error; 
id requestedValue = nil; // WTF? This isn't defined or used anywhere 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    // handle the error 
} 

Это является большим, и кажется, идеально подходит для того, что мне нужно ... но как один на самом деле использовать его? Я предполагаю, что, поскольку он возвращает словари, мне нужен ключ, чтобы получить значения - но где определяется ключ? Это строка «id requestedValue = nil»? Если да, то как «requestValue» становится ключом? Xcode дает мне предупреждение компилятора о неиспользуемой переменной в объявлении «requestValue». Я чувствую, что здесь что-то не хватает.

Заранее благодарим за любую помощь, которую вы можете предложить.

ответ

28

requestValue ничего и явно не используется (возможно, это было частью какого-то другого примера, который получил разрез & вставить в этот пример код - кто знает). Вы можете просто игнорировать его.

Ключи к словарю такие же, как и атрибуты, которые вы выбрали и которые определены в вашей модели. Например, если у вас есть лицо с тремя атрибутами, именами, возрастными, телефонными номерами, и вы запросили только имя, это были бы только ключи с данными в ваших словарях. Итак:

[request setEntity:entity]; 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctResults:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"name"]]; 

// Execute the fetch 
NSError *error; 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    abort(); 
} 
for(NSDictionary* obj in objects) { 
    NSLog(@"Person: %@", [obj objectForKey:@"name"]); 
} 
// ... 

Итак, если у вас есть 5 человек в вашем хранилище данных по имени Боб, Салли, Джо, Фрида и Сью, вы увидите эти имена распечатать. Если вы хотите использовать любой из других атрибутов (например, их возраст), вы должны добавить это к массиву, установленному в setPropertiesToFetch:.

В большинстве случаев, вероятно, лучше всего просто получить управляемый объект. Объект будет ошибочен, поэтому вы даже не будете добавлять атрибуты в память, если вы не получите к ним доступ. Кроме того, если вы хотите внести изменения в объекты, вы можете и сохранить их в хранилище (с управляемыми объектами).

+1

Perfect - спасибо за помощь. Фрагменты основных данных действительно полезны, но они оставляют немного воображения, если вы новый пользователь. Спасибо за помощь! – Andy

+4

«немного» для фантазии? Они оставляют ВСЕ для воображения. Я чувствую стремление шлепать себя каждый раз, когда единственным источником знаний являются документы, написанные Apple. К счастью, есть StackOverflow с множеством убийств, таких как Джейсон Коко и другие, которые помогают нам понять расплывчатые криптографические сообщения, написанные Apple в своих документах. Apple делает отличные продукты, но их документы засасывают бесконечность в квадрате + 1. – SpaceDog

+2

Похоже, что setReturnsDistinctValues ​​изменилось на setReturnsDistinctResults – mishod

Смежные вопросы