Преобразование приложения запрограммированных данных в приложение Core data - PullRequest
3 голосов
/ 01 ноября 2011

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

Идея для приложения: пользователь - гонщик. Он ездит по разным трассам. Каждая цепь имеет несколько именованных кривых, которые проходят с определенной скоростью и с определенной эффективностью. Таким образом, приложение должно хранить схемы, количество кривых для каждой цепи и множество (например, 200) проходов через отдельные кривые, сохраняя максимальную скорость и эффективность (например, строка «выдающиеся», «хорошие», «плохие»). Проходы используются в приложении в очереди, где последний означает «первым делом», как только вы достигнете 200 прохождений, чтобы улучшить статистические данные со временем и опыт водителя.

Я создал сущности с соответствующими параметрами и отношениями.

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

1 - я полагаю, поскольку объем данных невелик, я мог бы сгенерировать данные при первом запуске, сохранить их в основных данных, а затем при каждом запуске приложения каким-то образом проверять, есть ли основные данные, и основаны на этом либо создай новый или используй текущий. Я читал о хранении данных в plist и импорте их через XML и прочее, но мне не нужно делать это правильно? Я могу создать, сохранить и затем проверить, присутствуют ли какие-либо данные, чтобы узнать, является ли это первым запуском приложения или нет?

2 - я не совсем уверен, как сохранить очередь в основных данных. На данный момент я спроектировал это так, чтобы очередь для каждой кривой была составлена ​​из сущностей Drivethrough, имеющих отношение один к одному с кривыми с параметром, называемым index, так что я знаю, какой из проходов был первым, а какой последним. Я не уверен тогда, как я буду реализовывать возможности очереди удаления первого диска через. Будет ли я вынужден загрузить все данные, обработать их в очереди, а затем сохранить все данные в основных данных? Или он примет какое-то удаление первого диска и пересчитает индексы?

3 - могу ли я сказать, что все мои данные должны загружаться в мои контроллеры представления в "viewWillAppear"? И сохранить их сразу после того, как пользователь нажмет кнопку «Сохранить» или «Ввод» для каждого диска через?

Я не прошу код, я просто хотел бы, чтобы кто-нибудь сказал мне, если это вообще хороший подход, или если вы сделаете это диаметрально иначе.

Спасибо.

1 Ответ

1 голос
/ 01 ноября 2011

1) Сохранение данных во внешнем файле plist с последующим импортом в NSDictionary через +dictionaryWithContentsOfURL: с последующей итерацией по этому словарю и импортом в хранилище базовых данных в этом случае не требуется. Было бы необходимо, если бы вы хотели сериализовать данные вашей схемы извне, чтобы пользователь мог импортировать схемы, или чтобы вы могли вручную изменить исходную схему, отредактировав данные XML в списке.

2) До iOS-5.0 сущности хранятся в Базовых данных как неупорядоченные NSSet. Если вы ориентируетесь на iOS 4.x, вам нужно будет добавить атрибут для сохранения порядка в очереди, который позволит вам рассчитать, какой элемент был добавлен последним. Вам также потребуется написать метод для поиска сущностей и возврата атрибута сортировки с наибольшим номером, чтобы вы знали, что использовать для следующего атрибута сортировки при прохождении. Если вы ориентируетесь только на iOS 5.0, вы можете пометить отношения как упорядоченные, чтобы сохранить их как NSOrderedSet. См .: Примечания к выпуску основных данных для iOS 5.0 - Управляемые объекты

3) Выполнение кода загрузки данных в -viewWillAppear: зависит от того, сколько времени потребуется для генерации или загрузки данных. Если это занимает заметное количество времени, вы не захотите делать это синхронно, так как это заблокирует основной поток, на котором работает UIKit, если код выполняется в -viewWillAppear: Если время не тривиально (меньше 100-200 мс в как минимум), вы захотите сгенерировать данные в фоновом потоке, который может быть запущен в -viewWillAppear:. Самый простой способ сделать это - использовать очередь отправки и dispatch_async()

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