Можно ли обрабатывать базу данных Core Data, созданную с помощью UIManagedDocument с NSFileManager?

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

Я использую UIManagedDocument

Для этого я создал базу данных с приложением, а затем загрузил данные. Затем я искал папку iOS Simulator на моем Mac, перетащил и бросил persistentStore файл в комплекте приложения.

Позже в коде я скопировал его в NSDocumentDirectory потому что пользователю будет разрешено редактировать базу данных во время выполнения. Это было сделано с помощью следующего метода:

if(![[NSFileManager defaultManager] fileExistsAtPath:[self.appDatabase.fileURL path]])
{        
    // COPY FROM BUNDLE

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *DB = [[paths lastObject] stringByAppendingPathComponent:@"Default App Database"];
    DB = [DB stringByAppendingPathComponent:@"StoreContent"];

    [fileManager createDirectoryAtPath:DB withIntermediateDirectories:YES attributes:nil error:&error];

    NSLog(@"create directory error: %@",error);

    DB = [DB stringByAppendingPathComponent:@"persistentStore"];

    NSString *shippedDB = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"persistentStore"];
    NSLog(@"%d",[fileManager fileExistsAtPath:shippedDB]);
    [fileManager copyItemAtPath:shippedDB toPath:DB error:&error];

    NSLog(@"Copy error %@",error);
}

Все работает отлично! Но я не уверен, что это вызовет какую-то ошибку. Итак, мой вопрос, нормально ли обрабатывать базу данных Core Data, созданную из UIManagedDocument с помощью NSFileManager?

И будет ли Apple жаловаться в процессе проверки комплектации persistentStore файл?

1 ответ

Объединение постоянного хранилища по умолчанию с приложением явно упоминается в "Руководстве по программированию основных данных":

Как инициализировать магазин с данными по умолчанию?

...

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

Другие вопросы по тегам