我整天都在努力解决一个我发现是错误的NSInternalInconsistencyException
错误。我收到的错误控制台消息是“此 NSPersistentStoreCoordinator 没有持久存储。它无法执行保存操作。” 我还得到“执行被中断,原因:EXC_BAD_ACCESS(代码=1,地址=0x1)。”
我的 App Delegate 中有以下代码:
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
#pragma mark Core Data stack
- (NSManagedObjectContext *)managedObjectContext {
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return _managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel {
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"shindy.sqlite"];
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;
}
#pragma mark Application's documents directory
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
我已经仔细阅读了与此类似的其他问题,看来我的代码是一致的,我不应该遇到这个问题。然而,我是...
我已经尝试清理和删除应用程序并重新安装。我在设备和模拟器上都尝试了该应用程序。我将附加的 URLPath 的名称“shindy.sqlite”更改为我以前没有使用过的各种名称。[self saveContext];
我还尝试在我的方法中强制实例化,applicationDidFinishLaunching
以使我的应用程序创建商店。
我所有解决问题的尝试都只是返回了相同的错误。我不知道还能尝试什么。