Набор данных по умолчанию для приложения iPhone на основе Core Data - PullRequest
7 голосов
/ 11 июня 2009

Я пишу приложение для iPhone 3.0, которое использует Core Data для сохранения модели. Я хотел бы, чтобы приложение было установлено с набором данных по умолчанию. При разработке для iPhone <3.0 я использовал сценарий SQL для инициализации базы данных перед запуском сборки, а затем развернул подготовленный файл .sqlite в качестве ресурса приложения. Каков наилучший подход с Core Data. </p>

Вывод: В конце я написал общий обработчик XML. Имена элементов отображаются на имена классов Objective-C и свойств. Значения PCDATA в элементах были преобразованы в тип, объявленный в свойстве, названном элементом. Дочерние элементы или элементы свойств были преобразованы в экземпляры объектов - и, таким образом, путем анализа XML-документа был построен граф объектов. Сначала я должен был разобраться с временем выполнения Objective-C: -)

Пример целевых классов:

@interface Widget : NSObject {
@private
    NSString* name;
    NSSet* sprockets;
}
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSSet* sprockets;
- (void)addSprocketsObject:(Sprocket*)value;    
@end

@interface Sprocket : NSObject {
@private
    NSString* name;
    NSNumber* canFly;
    NSNumber* wheels;
}
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSNumber* canFly;
@property (nonatomic, retain) NSNumber* wheels;
@end

Пример данных по умолчанию:

<data>
    <Sprocket id="sprocket-1">
        <name>Sprocket1</name>
        <wheels>4</wheels>
    </Sprocket>
    <Widget id="widget-1">
        <name>MyWidget</name>
        <sprockets>
            <Sprocket ref-id="sprocket-1"/>
            <Sprocket id="sprocket-2">
                <name>Sprocket2</name>
                <canFly/>
            </Sprocket>
            <Sprocket id="sprocket-3">
                <name>Sprocket3</name>
            </Sprocket>
        </sprockets>
    </Widget>
</data>

Ответы [ 2 ]

6 голосов
/ 11 июня 2009

На ум приходят два варианта:

  1. Напишите импортер из некоторого приемлемого формата данных (XML, JSON и т. Д.) И импортируйте его в свой контекст основных данных при первом запуске, а затем сохраните контекст в постоянном хранилище.
  2. Если вашему приложению требуется только одно постоянное хранилище, вы можете предварительно заполнить его и развернуть постоянное хранилище с ресурсами своего приложения. Если вам необходимо несколько постоянных хранилищ, все из которых предварительно заполнены одними и теми же данными по умолчанию, вариант 1, вероятно, будет проще, но вы можете использовать migratePersistentStore: toURL: options: withType: error: (или эквивалент в основных данных iPhone - NSPersistenStoreCoordinator - все еще в NDA) для создания нового магазина из предварительно заполненного магазина для каждого нового необходимого магазина.

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

4 голосов
/ 27 сентября 2009

Вы можете использовать Plist для хранения начальных данных и заполнения вашего постоянного хранилища при первом запуске. Этот подход проще, чем писать собственный XML-парсер.

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