0

AppDelegate クラスで作成された MOC があります。RootView に MOC プロパティがあり、AppDelegate によって次のように設定されます。

rootView.managedObjectContext = self.managedObjectContext;

この rootView は、ある時点で ModalView を作成し、そこにも同じ方法で MOC プロパティを設定します。

すべて正常に動作します。新しい管理対象オブジェクトを作成でき、ビューはそれらにアクセスして削除できます。

ポイントまで[self.managedObjectContext save:&error](アプリがバックグラウンドに移動するときの AppDelegate クラスで)。

この後、rootView で新しいマネージド オブジェクトを作成すると、次のようなモーダル ビューでこの新しいオブジェクトを削除できません。[self.managedObjectContext deleteObject:managedObject]

アプリがクラッシュします。コンソールに次のようなエラー メッセージが表示されることがありました: NSManagedObjectContext は他のコンテキストのオブジェクトを削除できません。

そのため、保存後にMOCが何らかの形で変更されたようです。

そこで何が起こっているのか、何を見逃したのか。

iOS4.1を使用しています。

Thxと乾杯、

ベン

4

2 に答える 2

0

わかりました。これは本当に奇妙なことです。2日前、MOCの問題のためにプロジェクトの作業をやめました。昨日の夕方、私は再びそれに取り組み始めました。私はコードに何も変更せず、デバッグするためにエラーを再現したかっただけです。そして、何が起こったのですか?エラーは再び表示されませんでした。したがって、コンピュータを再起動すると問題が「修正」されたようです。それ以来、何時間もの作業とテストを行った後でも、エラーが二度と発生することはありませんでした。

とにかく助けてくれてありがとう。

さよなら、

ベン

于 2010-09-15T07:35:04.327 に答える
0

コードなしでは多くを語ることはできませんが、あなたの説明に基づいて大雑把な推測をすることができます.

nil の場合にコンテキストを作成するアプリ デリゲートのプロパティのカスタム ゲッター メソッドがあるmanagedObjectContext場合、それを台無しにして、アクセサーが毎回新しいコンテキストを生成する原因になっている可能性があります。

たとえば、Xcode テンプレート アクセサーは次のようになります。

- (NSManagedObjectContext *) managedObjectContext {

    if (managedObjectContext != nil) {
        return managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    return managedObjectContext;
}

self.managedObjectContext同様のことを行ったが、既存のコンテキストのテストを省略した場合、呼び出されるたびに新しいコンテキストが取得されます。

于 2010-09-14T12:18:20.583 に答える