У меня тоже есть ответ, я не говорю, что Джошуа не прав.<- Хе-хе ... двойной отрицательный. </p>
Мне совсем недавно пришлось это сделать, и правильный подход действительно зависит от того, сколько данных вы хотите предварительно загрузить?
A) Если этомного, тогда да, добавьте предварительно заполненное хранилище и загрузите его в начале
B) Если это не так, просто добавьте данные через код вручную
Оба имеют Pro и Con.Самая большая проблема с А) заключается в том, что когда вы собираетесь обновить свою модель, вам придется заново заполнить новый шаблон.Для меня это может быть административным кошмаром.
Итак, следующая вещь, которую вы можете задаться вопросом, это как определить, когда делать A) или B)?Ответ находится в метаданных постоянного хранилища.У вас действительно должен быть только один магазин, поэтому давайте предположим, что это так.Я просто получаю метаданные для «хранилища», и если мой объект dict не возвращает YES, то заполняю мою таблицу.Если сохранение выполнено успешно, обновите метаданные «хранилища», указав значение NSNumber BOOL YES.
Я рекомендую использовать методы класса для NSPersistentStoreCoordinator.Таким образом, вам не требуется выполнять другое сохранение в вашем контексте.
Код:
#pragma mark - Core Data Meta Data:
- (NSDictionary *) persistentStoreMetaData {
if ( ![_coreDataStore isExists] )
return [NSDictionary dictionary];
NSError * error = nil;
NSDictionary * dict = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType
URL:_coreDataStore
error:&error];
if ( error ) {
REPORT( errReportErrErrorStoreMetaDataGet );
return [NSDictionary dictionary];
}
return dict;
}
- (void) setPersistentStoreMetaData:(NSDictionary *)metaData {
if ( ![_coreDataStore isExists] ) return;
NSError * error = nil;
[NSPersistentStoreCoordinator setMetadata:metaData
forPersistentStoreOfType:NSSQLiteStoreType
URL:_coreDataStore
error:&error];
if ( error )
REPORT( errReportErrErrorStoreMetaDataSave );
}