2012-02-13 2 views
8

NSXMLParser의 일부로 변수를 사용하여 술어를 기반으로 객체를 검색하려고 시도하는 메소드를 작성하려고합니다. 코드는 다음과 같습니다핵심 데이터 술어에서 요소 이름에 변수 사용

내가 클래스에 정의 된 이러한 변수를 가지고 :

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; 

@property (strong, nonatomic) NSString *model; 
@property (strong, nonatomic) NSString *element; 

지금 방법에서, 나는이 같은 요청 설정 : 이제

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:self.model inManagedObjectContext:self.managedObjectContext]; 
[request setEntity:entity]; 

도전을 - 제가 할 수 있도록하려면 것은 :

// DOES NOT WORK 
[request setPredicate:[NSPredicate predicateWithFormat:@"%@ == %@", self.element,string]]; 

B ut은 결과를 반환하지 않습니다. 일부는 주변의 일 처리 후,이 작동합니까 것을 알 수 :

if ([self.element isEqualToString:@"name"]) { 
    [request setPredicate:[NSPredicate predicateWithFormat:@"name == %@", string]]; 
} 

이 내 self.element이 (? 내 생각)이 올바르게 설정되어 있는지 알려줍니다를하지만 술어는 식의 왼쪽을 좋아하지 않습니다 변수입니다.

나는 또한 시도 :

[request setPredicate:[NSPredicate predicateWithFormat:@"%s == %@", [self.element UTF8String],string]]; 

를 ... 그것은 문자열을 선호하는 아마하면 바로 볼 수 있습니다. 나는 그 일을 할 수 없었다.

나는 무엇을 시도하고 있습니까? Core Data 문서에서 가능한 한 많이 읽었으며 이런 식으로 수행하는 샘플 코드를 찾을 수 없지만 불가능하다고 말할 수있는 것을 찾지 못했습니다.

편집 : 지금 작업 코드는 : 당신이 전에하지 않은 경우

[request setPredicate:[NSPredicate predicateWithFormat:@"%K == %@", self.element,string]]; 

답변

14

Predicate Programming Guide 읽고 술어에 대한 모든 것을 찾을 수 있습니다.

올바르게 이해했다면 두 문자열 사이에 술어를 만들고 싶지만 첫 번째 문자열은 정의 된 문자열이 아니지만 바뀔 수 있습니다.
이전에는 사용하지 않았지만 동적 속성 이름이있는 조건자를 사용하여 문제를 해결할 수 있다고 생각합니다. 여기에 문서에서

:

동적 속성 이름 그들이 %@를 사용하여 형식 문자열로 대체 될 때 문자열 변수가 인용 부호로 둘러싸여 있기 때문에
, 당신은을 지정 %@을 사용할 수 없습니다 동적 속성 이름 - 다음 예제와 같이 으로 표시됩니다.

NSString *attributeName = @"firstName"; 
NSString *attributeValue = @"Adam"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ like %@", attributeName, attributeValue]; 

이 경우 술어 형식 문자열은 "adam"과 같은 "firstName"으로 평가됩니다.

동적 속성 이름을 지정하려면 형식 문자열에 %K을 사용합니다 (다음 부분 참조).

predicate = [NSPredicate predicateWithFormat:@"%K like %@", attributeName, attributeValue]; 

이 경우 술어 형식 문자열은 "아담"(더 인용 부호가 firstName을 주위에 없는지주의)처럼 FIRSTNAME을 평가합니다.

자세한 정보는 Predicate Format String Summary에서 확인할 수 있습니다.

+0

감사합니다. 내 코드를 작동시키는 정보의 특정 부분은 값이 아니라 키로 인수를 처리하는 % K 변수입니다. 이제 근무 =) – valdarin

+0

당신은 환영합니다 :) 핵심 데이터 및 술어는 멋진 기술이며 당신은 그들 모두를 할 수 있습니다 ... – matteodv

관련 문제