У меня здесь странная проблема.Недавно мы добавили функциональность iPad в существующее приложение для iPhone.И однажды приложение не запустилось в симуляторе iPad.Причина в том, что в симуляторе iPad путь к базе данных SQLite отличается.
Работает следующий сценарий: я запускаю приложение в симуляторе iPhone 5.0, позволяю создать базу данных.Затем я запускаю ту же цель в симуляторе iPad, проходит проверка, существует ли файл базы данных, и запускается ли приложение.
Когда я удаляю приложение из симулятора iPhone и сначала запускаю его на симуляторе iPad, происходит сбой, посколькуpersistentStoreCoordinator
не создается.
Путь к базе данных извлекается в [MyAppAppDelegate persistentStoreCoordinator]
следующим образом:
NSString *databasePath = [[MyApplication sharedApplication] databaseFilePath];
И соответствующие методы для этой строки:
- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // objectAtIndex:0 didn't make any difference
}
- (NSString *)databaseFilePath {
NSString *databasePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MyApp_v3.sqlite"];
return databasePath;
}
Печать пути к базе данных показывает следующее для для iPad и iPhone:
/Users/swramba/Library/Application Support/iPhone Simulator/5.0/Applications/ABF391C4-FCFF-4274-8FD1-E560C2FB58D9/Documents/MyApp_v3.sqlite
А теперь настоящая проблема ...
Однако, когда я позволяю iPad создать базу данных, файл sqlite находится не по этому пути, а в подкаталоге _Content
папки Documents
.
Почему iPad Simulator помещает его туда?а симулятор айфона нет?И почему он так делает, когда databaseFilePath
одинаково в обоих симуляторах?
Любая помощь с благодарностью!
С уважением, Себастьян
edit 1:
Именно здесь должен быть создан persistentStoreCoordinator , но приложение никогда не достигает этого кода на симуляторе iPad.(Поскольку он сначала проверяет, существует ли файл => НЕТ, затем он проверяет, создается ли база данных => НЕТ, установите для isCreatingDatabase
значение ДА (переключитесь, чтобы отобразить представление предупреждений). В следующий раз получатель persistentStoreCoordinator
получаетвызван, файл все еще не существует, но он создал его, но не там, где он должен быть (_Content
subdir)
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath:databasePath];
NSLog(@"SB Store URL: %@", storeUrl);
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator;