0

特定のキーのすべてのレコードを取得しようとしている次のコードがあります。

//  if the apptObject.aApptKey is nil, skip it...
if(apptObject.aApptKey == nil)
    continue;  //  go to beginning and try again 

    //  using apptObject.aApptKey, get the client's name
NSPredicate *predicate =  ([NSPredicate predicateWithFormat:@"(aClientKey = %@)", apptObject.aApptKey]);
    clientInfo = [ClientInfo MR_findAllWithPredicate: predicate];

問題は、このエラーが発生することです (Crashlytics の厚意による):

致命的な例外: NSInvalidArgumentException +entityForName: nil は、エンティティ名 'ClientInfo' を検索する有効な NSManagedObjectContext パラメータではありません

エラー メッセージが何を伝えているのか理解できないか、MR_findAll の前に nil をテストしている場合にどのようにエラーが発生するのか理解できません。問題の「キー」はまったく同じであることに注意してください。クライアントの名前を取得するために予約キーを使用しているだけです。

誰かがこれがどのように起こるか説明できますか?

4

1 に答える 1

0

(私のコメントから:)エラーメッセージは述語とは何の関係もありません。が であることを示していNSManagedObjectContextますnil

考えられる問題は、MR_contextForCurrentThread非推奨であり、今後使用すべきではないメソッドである可能性があります。その理由は、管理対象オブジェクト コンテキストごとに一意のスレッドを想定しているためです。これは、GCDキューで実行される新しい MOC 同時実行タイプには当てはまりません。https://stackoverflow.com/a/20536335/1187415を比較してください。

MR_defaultContextあるView Controllerから次のView Controllerにコンテキストを使用または渡すことをお勧めします。

于 2014-03-10T13:31:04.640 に答える