Основные данные и сортировка после условия соединения - PullRequest
0 голосов
/ 14 июля 2011

В моих таблицах основных данных есть 3 таблицы.
Таблица элементов : элементы, имеющие столбец идентификатора и соединение с таблицей свойств.
Таблица свойств : в нем есть столбец propertyValue, подключение к таблице элементов и подключение к таблице свойств.
Таблица свойств : в нем есть столбец propertyName и подключение к таблице свойств.

Таблица свойств содержит propertyName с именем "price".
Таблица свойств содержит propertyValue "20" для свойства "price".
Как вы думаете, я могу отсортировать таблицу Items по цене?

Я использую NSFetchedResultsController и создаю NSFetchRequest для него.Я попытался написать NSSortDescriptor с объектом блока компаратора для NSFetchRequest.Это не работаетПосле этого я попытался написать NSSortDescriptor без какого-либо селектора или блочного объекта, я просто установил ключ с именем dealPrice и создал категорию на управляемом объекте Item с помощью метода - (NSString *)dealPrice.Это тоже не сработало.

Знаете ли вы какой-нибудь другой метод?Или вы знаете решение?

Ответы [ 3 ]

3 голосов
/ 15 июля 2011

У вас явно плохой случай SQL-лихорадки.Вы пытаетесь рассматривать Core Data как оболочку SQL, и это все портит.

Базовые данные не являются SQL.Сущности не являются таблицами.Объекты не являются строками.Атрибуты не являются столбцами.Отношения не объединяются.Базовые данные - это система управления графом объектов, которая может сохранять или не сохранять объектный граф, а может и не использовать SQL для этого далеко за кулисами.Попытка представить Core Data в терминах SQL приведет к тому, что вы полностью неправильно поймете Core Data и приведете к большим трудностям и потерянному времени.

Модель данных Core Data не следует настраивать в зависимости от потребностей пользовательского интерфейса или любого другоготребование не данных.Вместо этого он должен точно моделировать / имитировать объекты, события или условия реального мира, с которыми имеет дело приложение.

В этом случае вы моделируете:

  1. Тип свойства, который имеет имя и цену.
  2. Элемент, обозначаемый каким-либо идентификатором
  3. Связь между одним или несколькими конкретными экземплярами свойств и одним или несколькими экземплярами элемента.

Следовательно, вашей модели данных нужны только две сущности, связанные отношениями.Вам не нужно «соединение», потому что отношения автоматически обрабатывают соединение между двумя объектами.

Самая простая модель имеет только однозначное отношение:

Item{
  id:string
  property<-->Property.item
}

Property{
  name:string
  price:number
  item<-->Item.property
}

Если каждый объект Item может иметь несколько связанных Property объектов, то у вас будет:

Item{
  id:string
  properties<-->>Property.item
}

Property{
  name:string
  price:number
  item<<-->Item.properties
}

Если у каждого Property объекта может быть несколько связанных Item объектов:

Item{
  id:string
  property<<-->Property.items
}

Property{
  name:string
  price:number
  items<-->>Item.properties
}

Способ настройки дескрипторов сортировки зависит от деталей взаимосвязей и объектов объекта, которые будут отображаться в вашей таблице.дисплей.

0 голосов
/ 14 июля 2011

Похоже, ваша реальная объектная модель и сущность с именем Сделка с атрибутом с именем "цена".

0 голосов
/ 14 июля 2011

Что я в первую очередь рекомендую, так это перестать думать о CoreData как о базе данных.Это НЕ база данных.То, что вы называете «таблицами», на самом деле является сущностями.Думайте о них как об объектах, которые имеют свойства и отношения к другим объектам.Подумайте о том, чтобы сделать вашу модель данных максимально простой.Не пытайтесь оптимизировать свою структуру для производительности базы данных и т. Д. Фактическая схема поддержки не находится под вашим контролем.

Имея это в виду, из того, что вы опубликовали о своей модели данных, кажется, что вы должны бытьвозможность разбиться как минимум на 2 объекта вместо 3 (возможно, 1, но не уверен, не видя всей вашей модели данных).Затем вы сможете выполнить простую выборку для сущности Items с помощью предиката, который сортирует свойство связанного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...