Я создал базовую базу данных в одном приложении, которое включало извлечение информации из API и заполнение базы данных.
Теперь я хотел бы использовать ее в другом приложении.
Iскопировал файл .xcdatamodeld и классы NSManagedObject.
Я добавил и импортировал инфраструктуру Core Data.
Я скопировал файл .sqlite в ресурсы моего нового приложения в качестве базы данных по умолчанию.
Я использую следующий код, который должен скопировать базу данных по умолчанию в каталог документов и открыть ее, чтобы я мог выполнять запросы к ней.
Это вызывает сбой приложения снет сообщения об ошибке, есть мысли о том, где я иду не так?
Если бы я должен был создать базу данных здесь с помощью saveToURL, я знаю, что имя файла будет постоянным, а не Trailer.sqlite, как показано ниже, это уместно?
Спасибо
- (void)viewDidLoad
{
[super viewDidLoad];
// Get URL -> "<Documents Directory>/<TrailerDB>"
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"TrailerDB"];
UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url];
// Copy out default db to documents directory if it doesn't already exist
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:[url path]]) {
NSString *defaultDB = [[NSBundle mainBundle]
pathForResource:@"trailerdatabase" ofType:@"sqlite"];
if (defaultDB) {
[fileManager copyItemAtPath:defaultDB toPath:[url path] error:NULL];
}
}
if (doc.documentState == UIDocumentStateClosed) {
// exists on disk, but we need to open it
[doc openWithCompletionHandler:^(BOOL success)
{
if (success) [self useDatabase:doc];
if (!success) NSLog(@"couldn’t open document at %@", url);
}];
} else if (doc.documentState == UIDocumentStateNormal)
{
[self useDatabase:doc];
}
}