Я обычно создаю свое постоянное хранилище и предварительно загружаю его в симулятор, что приятно и быстро по сравнению с устройством, особенно если данные поступают из сети или XML.Затем я копирую вывод (.sqlite) этого файла в комплект проекта.
Затем при запуске приложения выполните проверку и, если база данных не существует в том месте, куда смотрит координатор постоянного хранилища, скопируйте предварительно заполненную базу данных из вашего комплекта в правильное место.
Я полагаю, что именно об этом говорится в документации @simon, когда говорится, что нужно создать отдельное постоянное хранилище и скопировать его на место.
Обновлено
Взгляните на NSFileManager имеет следующий метод
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
Обсуждение
... Если файл с таким именем уже существует в dstPath, этоМетод прерывает попытку копирования и возвращает соответствующую ошибку.
, поскольку в силу предыдущего факта вам, возможно, не удастся просто использовать этот метод и не пытаться выполнить
- (BOOL)fileExistsAtPath:(NSString *)path
что может привести к гонке.
Поэтому перед загрузкой NSPersistentStoreCoordinator
вам нужно сделать что-то вроде:
NSString *seededDatabasePath = [[NSBundle mainBundle] pathForResource:@"myDB" ofType:@"sqlite"];
NSError *error = nil;
BOOL didCopy = [[NSFileManager defaultManager] copyItemAtPath:seededDatabasePath
toPath:fileDatabasePath
error:&error];
if (!didCopy) {
// .. make sure that the error isn't something bad
}