2013-02-23 2 views
1

Мое приложение в его нынешнем виде имеет .plist около 5000 словарей, которые во время выполнения используют для создания 5000 объектов моего пользовательского класса. Каждый из них содержит несколько строк, некоторые логические значения и т. Д. Это довольно быстрый процесс, занимает несколько секунд, вершины, но он немного громоздкий с использованием .plist с тысячами объектов.Могу ли я создать граф объектов данных ядра в одном приложении, а затем использовать его в другом из предварительно заданного состояния?

Я собираюсь перейти на Core Data (который я никогда раньше не использовал), поэтому первоначальный шаг будет получать данные из этого .plist в эти пользовательские объекты, а затем сохранять их в контексте. Я смотрел видео и т. Д., И думаю, что я буду в порядке.

Мой первый вопрос: Могу ли я создать граф объектов и модель данных в небольшом отдельном приложении (скажем, называемом ObjectMaker), а затем сохранить его там и импортировать .sqlite или какой-либо другой формат, который я экспортирую свои данные в виде в настоящее приложение, которое я делаю? Оттуда я буду выполнять все запросы на выборку, дальнейшее редактирование и сохранение данных и т. Д.

Мой второй вопрос: Можно ли предоставить «первое состояние запуска» графа объектов что пользователь первым приступит к открытию моего приложения (с теми 5000 готовыми к выпуску и готовыми к доступу/запросам и т. д.? Я бы хотел, чтобы приложение отправлялось с .sqlite или любым другим форматом, который я экспортирую свои данные в в приложении ObjectMaker и использования, исключительно, не зная, что .plist существовало.

Большое спасибо за любые и все ответы^_^

ответ

3

Мы делаем это довольно часто со многими нашими приложениями. Во время разработки мы создаем модель данных, но часто приходится импортировать кучу основных данных и выполнять некоторую конфигурацию по умолчанию для доступа к «базовому состоянию» базы данных sqlite, с которой мы отправляем продукт.

В делегате приложения у нас есть #define (или переменная), которую вы можете использовать для переключения режима DB create & import. При запуске режима создания мы удаляем любой существующий файл .sqlite, повторно инициализируем стек Core Data, затем запускаем процедуры импорта, чтобы преобразовать наши данные .plist и .csv в требуемые объекты Core Data.

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

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

2

Мой первый вопрос: могу ли я создать граф объектов и модель данных в небольшом отдельном приложении (скажем, называемом ObjectMaker), а затем сохранить его там, и импортировать .sqlite или какой-либо другой формат. Я экспортирую свои данные в фактическое приложение, которое я делаю? Оттуда я буду выполнять все запросы , дальнейшее редактирование и сохранение данных и т. Д.

Несомненно. Вы можете создать свой sql-хранилище в своем приложении ObjectMaker. После этого вы можете взять этот магазин и скопировать (вы должны сделать это самостоятельно) в основной комплект вашего приложения.

При запуске приложение скопирует хранилище в основную папку, как показано ниже. Постоянный магазин должен указывать на это хранилище папок.

NSString *storePath = [[self applicationDocumentsDirectory] 
    stringByAppendingPathComponent: @"yourStore.sqlite"]; 
NSURL *storeUrl = [NSURL fileURLWithPath:storePath]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if (![fileManager fileExistsAtPath:storePath]) { 
    NSString *defaultStorePath = [[NSBundle mainBundle] 
     pathForResource:@"yourStore" ofType:@"sqlite"]; 
    if (defaultStorePath) { 
     [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
    } 
} 

Мой второй вопрос: можно ли обеспечить «первый запуск состояние» графа объектов, которые пользователь должен попасть на первое открытие моего приложение (с этими 5000 объектов готовые и готовый к доступу/ queried и т. д. Я бы хотел, чтобы приложение отправлялось с форматом .sqlite или любым другим форматом . Я экспортирую свои данные в приложение ObjectMaker и использую это только , не зная, что .plist

По этому вопросу я не понимаю вашу цель, но я постараюсь дать некоторые подсказки. Во-первых, я не очень уверен, что пользователь будет использовать 5000 объектов за один раз. Таким образом, вы можете отобразить группу из них, выполняющих специальные запросы (NSFetchRequest), чтобы отображать их только по запросу. Кроме того, если вам нужно отображать объекты через таблицы, я действительно предлагаю играть с NSFetchedResultsController. Этот класс есть для этого. Это позволяет иметь больший контроль над данными и позволить Core Data делать управление памятью для вас.Например, он позволяет указать, сколько объектов нужно получить (скажем, 10). Прокрутка стола, другие 10 объектов будут извлечены и так далее ...

Надеюсь, что это поможет. Если вам нужно что-то еще, дайте мне знать.

+0

Итак, я пытаюсь использовать этот подход, но я получаю «reason =». Модель, используемая для открытия магазина, несовместима с той, которая используется для создания магазина »; я пробовал очистить Xcode/sim/производные данные , но он дает мне эту ошибку каждый раз. – Luke

+0

Похоже, что вы изменили модель данных, не исправляя ее корректно. Вам нужно будет удалить существующую базу данных или удалить последние изменения ... правильно увеличить версию модели данных, затем повторно примените свои изменения. – radesix