코어 데이터 클래스 인 SSSLicense에는 이름 및 유형과 같은 속성이 있습니다. isArchived라는 부울 속성을 가진 SSSArchivableEntity라는 추상 엔티티를 상속합니다.NSPredicate가 코어 데이터의 추상 엔티티 속성과 함께 작동하지 않습니다.
DB에서 라이센스 엔티티 전체를 이미 가져 왔으며 type 및 isArchived 플래그를 기반으로 필터링하려고합니다. 그러나 내 술어의 많은 변형에도 불구하고 유효한 결과를 얻을 수는 없습니다.
가 여기에 관련 코드입니다 :
NSSet *licenses = [person licenseList] ;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(licenseType like %@) AND (isArchived == NO)",
lType];
NSSet *filteredLicenses = [licenses filteredSetUsingPredicate:predicate];
내가 SSSLicense의 또 다른 속성을 이용할 수 있도록 조건을 변경하는 경우
는, 이름 (대신 isArchived의) 말, 술어 작동합니다. SSSLicense에 간단한 부울 속성을 추가하고이를 성공적으로 사용하여 필터링했습니다.isArchived가 추상 엔티티의 속성이라는 사실과 관련이있는 것으로 보입니다. 계승 된 속성으로 필터링하기 위해해야 할 특별한 것이 있습니까?
감사합니다.
특성의 이름을 바꾸어보십시오. 일부 특성 이름은 NSManagedObject의 기본 제공 속성과 충돌합니다. –
고마워,하지만 그건 작동하지 않았다. 나는 속성의 이름을 'fred'로 바꿨지 만, 여전히 같은 결과를 얻는다. –
'NSPredicate'는 NSString이 아니므로 술어에'% K'와'% @'형식 지정자를 사용해야하는 방법에 대해 더 알아야합니다. 그렇지 않으면 블록으로 된 술어를 만들 수 있습니다 훨씬 편안해. – holex