Таким образом в просмотре Базовых Отрывков Данных, я нашел следующий код:
...
[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
}
Здорово и кажется идеально подходящим для того, в чем я нуждаюсь..., но как каждый на самом деле использует его? Я принимаю, так как это возвращает словари, мне нужен ключ для достигания значений - но где ключ определяется? Это - "идентификатор requestedValue = ноль" строка? Если так, как "requestedValue" становится ключом? XCode дает мне предупреждение компилятора о неиспользуемой переменной в "requestedValue" объявлении. Я чувствую, что пропускаю что-то здесь.
Заранее спасибо за любую помощь можно предложить.
requestValue - это ничто и, очевидно, не используется (возможно, это часть другого примера, который был вырезан и вставлен в этот пример кода - кто знает). Вы можете просто игнорировать это.
Ключи для словаря такие же, как атрибуты, которые вы выбрали, и определены в вашей модели. Так, например, если у вас есть физическая сущность с тремя определенными атрибутами, name, age, phoneNumber, и вы запросили только имя, это будут единственные ключи с данными в ваших словарях. Итак:
[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:
.
Однако в большинстве случаев, вероятно, лучше всего просто получить управляемый объект. Объект будет поврежден, поэтому вы даже не сможете занести атрибуты в память, если не получите к ним доступ. Кроме того, если вы хотите внести изменения в объекты, вы можете сохранить их в хранилище (с управляемыми объектами).