1

나는 이것이 왜 작동하지 않는지 알아 내려고 노력하고 있습니다.CoreData 관계 검색하기

Quote 

Customer 

Quote은 단순히 'customer'라는 Customer와 일대일 관계 속성이 있습니다 :

나는 두 개의 엔티티가 있습니다. 고객에게 CoreData objectID (분명히)이 있습니다. 나는 모든 견적을 검색하고, CustomerobjectID을 기반으로하는 특정 고객을 가진 고객을 반환하려고합니다. 나는이 그럭저럭 한 모든 튜토리얼을 통해 읽기하지만 충돌 점점 계속 :

+ (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>'

는 프리디 설정이 잘못인가? 문서를 읽으면 도트 구문을 사용하여 술어의 속성에 액세스 할 수 있다고 나와 있습니다.

도와주세요 ...

+2

한 고객이 많은 견적을 가질 수있는 이유는 일대 다 많은 관계를 사용하지 않고 핵심 데이터를 사용하여 관련 견적 객체를 찾는 이유가 무엇입니까? – Gary

+0

@Gary 귀하의 도움에 감사드립니다. 저를 올바른 답으로 인도하십시오! – random

답변

1

는 핵심 데이터는 모든 관련 인용 객체의 NSSet을 반환 고객 개체에 따옴표 멤버를 생성해야합니다.

+0

오른쪽! 휴식의 견고한 밤 이후 모두 함께오고있어 :) 당신의 도움을 주셔서 감사합니다 – random

+0

가져 오기 요청하지 않고, 당신은 편리한 fetchedResultsController를 잃게됩니다, 당신에게 업데이트와 물건을 다루는 큰 가능성을 제공합니다. 그래서 나는 해결책을 찾으러 간다. – Trantec

3

수면의 부족을 켜고 정답으로 저를 이끌어 @Gary.

  1. 고객과 견적을 다르게 생각해야합니다.

  2. 엔티티 NSManagedObjectID 속성을 비교할 때 명시 적으로 상태를 나타내지 않아도됩니다. 그래서 NSPredicate에 다음과 같은 수정 내 문제가 해결되었습니다.

당신은 전혀 인출 할 필요가 없습니다

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