Быстрое создание отношений Core Data из реляционных данных (iOS) - PullRequest
2 голосов
/ 25 октября 2011

Я использую Core Data для хранения данных с сервера, который отправляется в «реляционной» форме.

Например, данные, которые я получаю с сервера, выглядят примерно так (фактический формат несколько отличается, но достаточно похож)

Users: [{PK: 1, Name: 'A B'}, {PK: 2, Name: 'C D'}, {PK: 3, Name: 'E F'}]
Posts: [{PK: 1, UserPK: 1, Content: '...'}, {PK: 2, UserPK: 3, Content: '...'}]

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

Проблема заключается в том, что сообщения связываются с пользователями.«Обычный» способ сделать это - записать post.user = user;. Однако для этого необходимо, чтобы с диска было загружено user.

В настоящее время я планирую загрузить всех пользователей, вызвать их и создать ошибку.NSDictionary, который сопоставляет PK с реальными объектами.Таким образом, я могу быстро найти пользователя, которого нужно связать с постом.Однако это решение кажется немного сложным для чего-то, что по сути должно быть довольно тривиальной операцией.

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Ваше решение сохранить пользователей в памяти в NSDictionary - это звук.Они не должны занимать слишком много памяти, пока вы оставляете их в неисправном состоянии.Неисправный МО - крошечный .

0 голосов
/ 25 октября 2011

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

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

Я продолжал использовать Core Data для сохранения пользовательских изменений и ввел класс диспетчера данных для объединения обоих источников данных.

Не совсем то, что вы просили, я думаю, но, возможно, это помогает ...

...