Ответ 1
Попробуйте сделать:
NSString *pathToYourSqliteFile = @"/your/path/here";
NSURL *storeURL = [NSURL fileURLWithPath: isDirectory:NO];
Посмотрите, делает ли это трюк.
Я использую этот шаблон Xcode для основных данных.
У делегата у меня есть этот метод:
- (NSURL *)applicationDocumentsDirectory {
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
но для этого требуется iOS4.
Я пытаюсь сделать приложение совместимым с 3.0.
Итак, я преобразовал этот метод в:
- (NSURL *)applicationDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [NSURL URLWithString:documentsDirectory];
}
но когда coredata пытается использовать URL магазина в
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyFile.sqlite"];
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
он сбой на линии IF с сообщением:
CoreData SQL хранит только поддерживаемые URL-адреса файлов (полученные/var/mobile/Applications/BB312A7E-6AE1-4BA2-AD87-6B96D8855CC6/Documents/MyFile.sqlite).
но StoreURL - это NSURL!
Любые подсказки? Благодаря
Попробуйте сделать:
NSString *pathToYourSqliteFile = @"/your/path/here";
NSURL *storeURL = [NSURL fileURLWithPath: isDirectory:NO];
Посмотрите, делает ли это трюк.
См. Сбой каталога приложений CoreData на iOS3
Предложение Surfdev работает нормально на 3.1.2
Swift 3
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask).first!