2011-04-21 3 views
2

코어 데이터를 사용하고 Person (코어 데이터의 엔터티)이라는 하위 클래스 NSManagedObject이 있습니다. Person 객체는 여러 속성 (예 : firstName, lastName 등) 및 관계 (예 : friends, coWorkers)를가집니다. 이러한 속성 중 일부는 선택 사항이지만 다른 속성은 필수 항목입니다.NSManagedObject 특성이 선택 가능한지 확인하십시오.

Person 개체가 주어지면 어떻게 특정 속성이나 관계가 선택적인지 필수인지를 효율적으로 결정할 수 있습니까?

내가 노력하고 내가 상당히 자주 코드를 호출해야하므로, Person 객체의 각 속성을 통해 비효율적 인 루프의 어떤 종류의 일을하지 않으려

, 그래서 의사 유사한 아래 완벽 할 것 :

if ([[aPerson getProperty:@"firstName"] isOptional]) { 

    // do stuff 

} 

...하지만 간단하게 처리 할 수 ​​있는지 여부는 확실하지 않습니다. 위의 의사 코드는 속성 만 검사하므로 확인중인 특성이 관계 인 경우 다른 작업을 수행해야한다고 추측합니다.

단일 루프를 수행하고 모든 필수 속성의 이름을 배열에 저장하면 (그 다음 속성 이름의 존재 여부를 확인하기 만하면됩니다.) 그게 내가하고있는 것입니다. 그러나 불행하게도 그것은 내 코드의 구조와 실제로 작동하지 않습니다 (따라서 "주문형"접근 방식의 필요성).

는 어떤 도움을 크게 감상 할 수있다 :)

+0

에서 함수를 작성할 수 있습니다. "선택 사항"은 엔티티의 속성입니다. 이는 관리 객체 모델 파일에 정의되어 있으며 컨텍스트가 할당되면 변경할 수 없습니다. 엔터티에 선택적 관계가있는 경우 해당 엔터티로 초기화 된 모든 관리 대상 개체는 선택적 관계를 가지며 변경되지 않습니다. 선택적인 관계에 대해 관리 대상 개체를 검사 할 필요가 없으며 모델의 관계가 무엇인지 알아야합니다. – TechZen

답변

6

당신은 당신의 기본 서브 클래스 난 당신이 관리 객체와 혼동 실체 생각

NSDictionary *d = [[self entity] attributesByName]; 
NSAttributeDescription *attr = (NSAttributeDescription *)[d objectForKey:@"test"]; 
BOOL isopt = [attr isOptional]; 
+0

굉장합니다. 감사합니다 일라이어스! 이 NSManagedObject 범주에 만들었고 그것은 위대한 작품 :) – Skoota

+0

+1이 작동하지만 무의미합니다. 동일한 엔터티로 초기화 된 모든 개체가 정확히 동일한 관계 구성을 가지기 때문에 특정 관리 대상 개체의 관계를 확인하지 않아도됩니다. – TechZen

관련 문제