2014-11-06 2 views
0

xcdatamodeld 파일에서 firstName, lastNameemail 필드가있는 Person 엔티티를 만들었습니다. 그런 다음 추가 필드가있는 User 엔티티를 만들었습니다. 나는 User의 상위 엔티티로 Person을 설정했습니다.NSManagedObject CoreData의 상위 - 하위 계층

그런 다음 '편집자'메뉴에서 'Create NSManagedObject Subclass ...'옵션을 사용하고 이러한 엔티티에 대한 클래스를 생성했습니다.

지금 내가 User* user = [[User alloc] init]을했을 때 어떤 이유로 user.firstName이나 다른 수퍼 클래스 Person에 액세스 할 수 없습니다. 그것은 "속성 firstName은 User * 유형의 객체에서 발견되지 않았습니다."라고 말했습니다. User 클래스는 서브 클래스가 NSManagedObject이고 Person이 아닌 서브 클래스입니다. 문제가 있다고 생각하여 UserPerson의 하위 클래스로 변경했습니다. 난 정말 내가 잘못 여기서 뭐하는 거지 모르겠어요

2014-11-05 20:24:14.142 MyApp[15131:3332646] CoreData: error: Failed to call designated initializer on NSManagedObject class 'User' 
2014-11-05 20:24:14.142 MyApp[15131:3332646] -[User setFirstName:]: unrecognized selector sent to instance 0x7fee5a436b90 

을 - 코드는 잘 컴파일,하지만이 오류와 런타임에 추락했다. Xcode는 클래스를 올바르게 생성해야한다고 생각하고 상자를 그대로 사용할 수 있어야합니다.

+0

I, [및 기타] (http://stackoverflow.com/questions/25703485/coredata-abstract-entity-with-relationship/) XCode GUI에 부모 엔티티 스틱이 없어도 쉽게 알 수 있습니다. 부모 엔티티를 Person으로 설정하는 것만으로도 user.firstName에 액세스 할 수 있습니다. 상속을 확인하기 위해 user.entity.superEntity.name 또는 다른 경로를 쿼리 할 수도 있습니다. – stevesliva

답변

2

실패한 초기화 (목록의 첫 번째 오류)가 두 번째 오류 (인식 할 수없는 선택기)의 원인이라고 의심됩니다.

init이 아닌 initWithEntity:insertIntoManagedObjectContext:을 사용해야합니다. 또는 NSEntityDescriptioninsertNewObjectForEntityForName:inManagedObjectContext: 클래스 메소드를 사용하십시오.

+0

예. 나는 두시간 후에 그것을 깨달았다. 그것이 문제였습니다. –

관련 문제