0

エラーであることがわかったエラーを解決するために一日中取り組んできました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

問題を解決しようとする試みはすべて、単に同じエラーを返しました。他に何を試すべきかわかりません。

4

1 に答える 1

0

私は最終的に自分が間違っていたことを理解しました。残念ながら、これは私が犯したばかげた間違いだったので、ほとんどの人にとってはあまり役に立たないでしょう。

App Delegate の URL に通常の「追加」を行っていました。そして、ロードされる最初のView Controllerに再び「追加」します。これにより、私のコードは、既に作成された sqlite フォルダーに名前を追加しました。

于 2013-01-12T06:21:57.933 に答える