Как выбрать отличные значения в Базовых Данных?

Таким образом в просмотре Базовых Отрывков Данных, я нашел следующий код:

...
[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" объявлении. Я чувствую, что пропускаю что-то здесь.

Заранее спасибо за любую помощь можно предложить.

14
задан Yuji 7 May 2010 в 03:02
поделиться

1 ответ

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: .

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

28
ответ дан 1 December 2019 в 09:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: