Ответ 1
requestValue ничего и явно не используется (возможно, это было частью какого-то другого примера, который получил cut & paste в этом примере кода - кто знает). Вы можете просто игнорировать его.
Ключи для словаря совпадают с атрибутами, которые вы выбрали и определены в вашей модели. Например, если у вас есть лицо с тремя атрибутами, именами, возрастными, телефонными номерами, и вы запросили только имя, это были бы только ключи с данными в ваших словарях. Итак:
[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:
.
В большинстве случаев, вероятно, лучше всего просто получить управляемый объект. Объект будет ошибочен, поэтому вы даже не будете добавлять атрибуты в память, если вы не получите к ним доступ. Кроме того, если вы хотите внести изменения в объекты, вы можете и сохранить их в хранилище (с управляемыми объектами).