Можно ли обрабатывать базу данных 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 ответ
Объединение постоянного хранилища по умолчанию с приложением явно упоминается в "Руководстве по программированию основных данных":
Как инициализировать магазин с данными по умолчанию?
...
Вы можете создать отдельное постоянное хранилище, которое содержит данные по умолчанию и включает хранилище в качестве ресурса приложения. Если вы хотите использовать его, вы должны либо скопировать все хранилище в подходящее место, либо скопировать объекты из хранилища по умолчанию в существующее хранилище.