2015-01-29 5 views
0

코어 데이터에 의해 생성 된 클래스 Base : NSManagedObject이 있으며이 엔티티에 몇 가지 메소드를 추가하기 위해 서브 클래스로 Derived : Base을 사용합니다. 이제 Derived 클래스에 속성 (Base 클래스에 없음)을 추가하고 싶습니다. 그러나 추가 된 속성의 setter에 액세스하려고하면 예외가 throw됩니다.NSManagedObject 하위 클래스의 하위 클래스에 속성을 추가 할 수 있습니까?

caught "NSInvalidArgumentException", "-[Base setAddedProperty:]: unrecognized selector sent to instance 0x7fdcc31b36d0" 

아무도 도와 줄 수 있습니까?

EDIT : NSManagedObject의 하위 클래스는 방금 Derived에 메서드를 추가했기 때문에 NSManagedObject의 하위 클래스에 자체 메서드가 없어서 비슷한 예외가 발생했습니다. NSManagedObject의 하위 클래스에 메서드를 추가하는 유일한 방법은 그 평균 범주입니까?

편집 : 구성의 항목 "클래스"를 Derived으로 변경했으며 현재 모든 것이 작동합니다. 새로 추가 된 모든 특성에 액세스하고 사용자 정의 된 메소드를 호출 할 수 있습니다. 왜? 이것이 좋은 습관입니까?

편집 : 위의 설명이 잘못 이해 된 것 같습니다. 하위 엔티티를 생성하지 않고 사용자 정의 된 메소드 및 특성을 제공하기 위해 코어 데이터에 의해 생성 된 엔티티 클래스를 서브 클래스 화하려고합니다. 따라서 Derived은 데이터 모델의 엔터티가 아닙니다.

+1

@Zhihhao L. .xcdatamodel을 업그레이드하려고 했습니까? .xcdatamodel에 새 엔티티를 추가 한 후에는 클래스를 삭제하고 다시 만들어야합니다. –

+0

@ СергейОлейнич 데이터 모델을 변경하지 않았습니다. 난 그냥 NSManagedObject의 하위 클래스를 생성하고 생성 된 하위 클래스에 대한 몇 가지 하위 클래스를 만들었습니다. – Codinfox

+0

@ Zhihhao L. 모델에서 상속을위한 체크 박스를 설정 했습니까? –

답변

0

(또한 자료에 대한 추상적 인 개체를 설정하려고).

내 .xcdatamodeld 파일에서 Base 엔티티를 Base 클래스에 매핑했습니다. 내 코드에서 다음과 같이 인스턴스를 만듭니다.

Derived* pointer = [Derived MR_createEntity]; 

이 메서드는 나를 위해 NSEntityDescriptor insertNewObjectForEntityForName:inManagedObjectContext을 호출합니다. 그러나이 메서드는 포인터가 Derived* 임에도 불구하고 Derived 대신 Base의 인스턴스를 반환하며 컴파일시 구문 오류 여야합니다.

그러므로 내 방법을 Derived에 적용하려면 Base에서 Derived으로 매핑을 수동으로 변경해야합니다.

편집 : 이 답변을 작성 후, 내가 위에서 설명한 정말 편리 정확히 같은 생각을 사용합니다 멋진 도구 mogenerator을 발견했다.

0

또한 xcdatamodel에서 상속을 지정해야합니다. 필드 검사 : xcdatamodel의 이름, 클래스, 상위 엔티티. 서브 클래스가 NSManagedObject 인 경우 Derived : Base이면 충분하지 않습니다.

+0

그러나 'Derived'클래스는 하위 엔티티가 아니며 'Base'확장입니다. 수업. 그 기능은 카테고리와 비슷하지만 일부 속성도 추가하고 싶습니다. – Codinfox

0

당신은 부모의 양을 선택해야합니다 내가 고정이 문제를 가지고 Check this picture and you will see what i mean about checkbox

+0

그러나 '파생 됨'은 엔티티가 아니므로이 패널에서 찾을 수 없습니다. 편집을 참조하십시오. – Codinfox

관련 문제