CoreData PersistentStorage не удалось создать файл
У меня проблема на iOS 8.1 с CoreData. На моем устройстве я всегда получаю эту ошибку, в то время как код прекрасно работает на каждом симуляторе:
Error Domain=NSCocoaErrorDomain Code=512 "The operation couldn’t be completed. (Cocoa error 512.)" UserInfo=0x15e62bd0 {reason=Failed to create file; code = 1} with userInfo dictionary {
reason = "Failed to create file; code = 1";
}
Я уже пытался удалить приложение с моего устройства. Я успешно пытался вручную создать текстовый файл. Вот фрагмент кода, который вызывает ошибку:
- (NSPersistentStoreCoordinator*) persistentStoreCoordinator {
NSError* error = nil;
NSURL* storeURL = [[[NSBundle mainBundle] resourceURL] URLByAppendingPathComponent: @"users.sqlite"];
if (_persistentStoreCoordinator != nil)
return _persistentStoreCoordinator;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
error = nil;
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];
}
return _persistentStoreCoordinator;
}
РЕДАКТИРОВАТЬ:
Спасибо за ваш ответ, Jrturton. Решение
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSURL* storeURL = [NSURL fileURLWithPath:[documentsDirectory stringByAppendingString:@"/users.sqlite"] isDirectory:NO];
1 ответ
Решение
Пакет вашего приложения доступен только для чтения на устройстве, но не на симуляторе.
Когда вы создаете storeURL
вы создаете URL, который указывает на пакет приложения. Вместо этого вы должны использовать каталог документов.