2

簡単な質問です。このコードの何が問題なのか誰か教えてもらえますか?

+ (NSManagedObject*) managedObjectWithServerId:(NSInteger)serverId inManagedObjectContext:(NSManagedObjectContext*)context{

    //Execute request and get all the results
    NSError * error = nil;
    NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass(self)];
    request.predicate = [NSPredicate predicateWithFormat:@"serverId == %@" argumentArray:[NSArray arrayWithObject:[NSNumber numberWithInteger:serverId]]];
    NSArray * results = [context executeFetchRequest:request error:&error];
}

結果配列は常に 0 オブジェクトの NSArray であり、エラーは発生せず、何も表示されません。ただの 0 カウントの配列です。また、常に 0 の要素を返すことはできません。SQLite エクスプローラーを使用して Core Data データベースを探索していますが、serverId要求している要素があるため、少なくとも 1 があるはずです。

述語を間違っていますか?

上記のコードはNSManagedObjectカテゴリに実装され、次のように呼び出されます。

 [User managedObjectWithServerId:whatev inManagedObjectContext:context];

User私のモデルのエンティティと のサブクラスはどこにありますかNSManagedObject

4

1 に答える 1

0

問題が修正されました。予期しない状態が発生したため、常にデータベースファイルを再作成していたようです。すべての主キーが常に1から始まっていることに気づきました。

新しいファイルを作成する前に以前のUIManagedDocumentデータベースファイルを削除しないと、CoreDataにいくつかの問題があるようです。

条件を修正すると、NSPersistentStoreCoordinatorのクラッシュエラーは発生しません。デバッグを伴うすべてのSQLメソッドを確認でき、もちろん、フェッチは正しく機能します。

助けてくれたすべての人に感謝し、あなたの時間を無駄にしてすみません:)

于 2013-01-14T11:20:18.943 に答える