Подтвердить что ты не робот

Возможно ли получить только выбранное свойство в запросе Core Data

У меня (я думаю) типичная проблема. База данных основных данных содержит таблицу, в которой есть поля BLOB и довольно длинные текстовые поля.

Обычно мне не нужно загружать агрессивные поля большого размера. Поскольку в базе данных имеется несколько тысяч записей, я бы предпочел получить только те данные, которые мне действительно нужны. Другими словами, я хотел бы задать запрос "SELECT name, id FROM TAB_NAME", а не запрос "SELECT * FROM TAB_NAME".

Есть ли способ получить только выбранные поля с использованием Core Data? Или я должен искать какой-то другой вариант, например, отдельные поля в другую таблицу? Может быть, есть лучший (более простой) способ сделать это?

Я привык работать с Hibernate или JPA, где легко выполнить описанную выше операцию, после прохождения Core Data docs я не вижу такой опции.

4b9b3361

Ответ 1

Другими словами, я хотел бы сделать запрос "SELECT name, id FROM TAB_NAME", а не запрос "SELECT * FROM TAB_NAME".

Ответ на этот вопрос был принят, но FYI, здесь, как получить только определенные свойства объекта с Core Data, без повторной факторизации вашей модели:

// build your NSFetchRequest
// ...

[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:
  [NSArray arrayWithObjects:@"property1", @"property2", /* etc. */ nil]];    

См. также документацию для NSFetchRequest.

Ответ 2

Core Data уже выполняет "ленивую загрузку" в виде faulting: ошибки только извлекают данные из магазина, когда вам это нужно, что снижает операционные издержки памяти и производительности. Также читайте Документацию по основным данным для получения дополнительной информации:

BLOB часто представляет собой атрибут объекта - например, фотография может быть атрибутом объекта Employee. Для BLOB с небольшим или скромным размером (и CLOB) вы должны создать отдельный объект для данных и создать вместо одного атрибута отношение "один". Например, вы можете создавать объекты Employee и Photograph с отношениями "один к одному" между ними, где отношения от Employee to Photograph заменяют атрибут фотографии Employee. Этот шаблон максимизирует преимущества сбоя объекта (см. "Неисправность и Uniquing" ). Любая полученная фотография извлекается только в том случае, если она действительно необходима (если связь проходит).

Ответ 3

Я думаю, что в этом случае вы можете захотеть сохранить большие поля (те, которые вы предпочитаете не загружать) на отдельный объект, и просто создать для этого соотношение 1:1. Таким образом, даже если вы ошибаетесь в своем объекте, вы будете получать только "более легкие" атрибуты и получать более тяжелые из них, которые вы использовали бы.