2012-04-14 2 views
2

Я разрабатываю приложение, использующее CoreData.Первичный ключ для ввода данных ядра iPhone

So in .sqlite файл, он управляет главным ключом сам.

Основной атрибут атрибута ключа - Z_PK.

Моя проблема в том, что я хочу, чтобы данные из моей таблицы сортировались по возрастанию по первичному ключу.

Я использую этот код

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"_PK" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 

Но это не работает.

, когда я использую «название» InstEd из «_PK», это работает прекрасно

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 

Так есть ли другой способ использовать первичный ключ таблицы?

+0

Не могли бы вы разместить изображение или ваш Xcdatanodel, потому что ваш вопрос немного непонятен? –

+0

** Первичный ключ в данных ядра? ** –

+0

Привет, Никита, я пишу. Сформировать файл в каталог документов. –

ответ

4

CoreData управляет постоянными графами объектов. Это не RDBM. У вас нет контроля над уникальным первичным ключом, поэтому вы не контролируете его значение. Это всего лишь деталь реализации, и по какой-либо причине не следует ссылаться.

Таким образом, почему вы хотите отсортировать по нему? Я могу думать о нескольких причинах ...

  1. Вы хотите получить доступ к объектам в том порядке, в котором они были добавлены в базу данных. Однако вы можете легко сделать это несколькими способами.

1a. Вы можете добавить поле к каждому объекту. Вы можете установить его как UUID или увеличивать целое число.

1b. У вас может быть сущность, что-то вроде «EntityList», которая имеет упорядоченное отношение «один ко многим» к «Entity».

1c. Вы можете добавить отношения «один к одному» от Entity к себе, а затем просто управлять им, как связанный список. Каждый раз, когда вы добавляете Entity, поместите его в конец списка.

Любое из этих решений дает вам возможность доступа к объектам Entity, чтобы они были добавлены.

  1. Или вы действительно не заботитесь о том, как вы их видите, но вы хотите последовательного заказа.

2a. Добавьте атрибут primaryKey и назначьте ему UUID.

2b. Используйте отношения упорядоченных ко многим.

Наконец, если вы действительно хотите получить доступ к первичному ключу, я бы предложил иметь отдельную базу данных sqlite, которую вы используете для специального доступа с ключами. Затем вы можете связать ключ с идентификатором объекта объекта в хранилище CoreData.

+0

Спасибо, Джоди, у меня есть альтернативное решение для этого. Но я просто хотел знать, что это возможно или нет? Спасибо за помощь. –

Смежные вопросы