1

なぜこれが機能しないのかを理解しようとして、髪を引っ張ろうとしています。

私は2つのエンティティを持っています:

Quote

Customer

Aには、単に ' ' と呼ばれる とのQuote1 対 1 の関係プロパティがあります。顧客には CoreData があります(明らかに)。すべての見積もりを検索し、に基づいて特定の顧客が関連付けられている見積もりを返そうとしています。私はこれを得ることができたすべてのチュートリアルを読んでいますが、私はクラッシュし続けます:CustomercustomerobjectIDCustomer objectID

+ (void)fetchQuotesForCustomerID:(NSManagedObjectID*)objectID results:(void(^)(NSError* error, NSArray *fetchedResults))completion {

    NSManagedObjectContext *context = [[QuoteGenerator sharedGenerator] managedObjectContext];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Quote"
                                              inManagedObjectContext:context];
    [fetchRequest setEntity:entity];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"customer.objectID == %@", objectID];

    [fetchRequest setPredicate:predicate];

    NSError *error;

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

    if (error) {
        NSLog(@"fetch error = %@", [error localizedDescription]);
        completion(error, nil);
    } else {
        NSLog(@"fetch count = %d", fetchedObjects.count);
        completion(nil, fetchedObjects);
    }
}

出力エラー:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath customer.objectID not found in entity <NSSQLEntity Quote id=13>'

述語の設定が間違っていますか?ドキュメントを読むと、ドット構文を使用して述語のプロパティにアクセスできることがわかります。

助けてください...

4

2 に答える 2

3

睡眠不足であることが判明し、@Gary が正しい答えに導きます。

  1. 顧客から見積書への対多関係が必要でした。

  2. エンティティ プロパティを比較する場合NSManagedObjectID、明示的に記述する必要はありません。したがって、修正されたNSPredicate問題に対する次の変更。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY customer == %@", objectID];

于 2013-02-26T05:47:53.910 に答える
1

フェッチを行う必要はまったくありません。コア データは、関連するすべての見積もりオブジェクトの NSSet を返す顧客オブジェクトの見積もりメンバーを生成する必要があります。

于 2013-02-26T05:51:28.577 に答える