0

iPhoneアプリケーションで使用するために、Xcodeのデータモデラーに組み込まれた「ストア」と呼ばれる単純なエンティティがあります。クラス (Store) も関連付けられており、CoreData を使用してデータを問題なく保存および取得できました。

今、私は別のエンティティ (Aisle) との関係を持ちたいことに気付きました。Aisle から Store へはすでに 1 対 1 の関係がありますが、1 つの Store に複数の Aisle が存在する可能性があるため、その逆を追加してみました。新しい関係は 1 対多であり、元の 1 対 1 の関係の逆であり、オプションであり、カスケードに設定された削除があります。関連する Store クラスも再作成して、クラス定義にも NSSet ivar が含まれるようにしました。

この関係を追加するだけで、NSFetchRequest を介して既存のデータを取得できなくなります。デバッグしていると、リクエストによって入力されている配列にアイテムが含まれていないことがわかりますが、SQL データベースを見ると、オブジェクトがすべてそこにあることがわかります。新しい関係を削除すると、すべて正常に機能します。

データを取得するための私のコードは次のとおりです。

NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Store" inManagedObjectContext:context];

[fetchRequest setEntity:entity];

NSError *error;
NSArray *storesList = [context executeFetchRequest:fetchRequest error:&error];

[fetchRequest release];

フェッチが正しく機能しない理由がわかりましたか?

ありがとうございました!

4

1 に答える 1

1

モデルの変更後に、sqllite ファイルを削除して DB を再作成し、再作成しましたか? そうでない場合は、これを検討することをお勧めします。

于 2010-08-29T21:05:53.350 に答える