xcdatamodeld 파일에서 firstName
, lastName
및 email
필드가있는 Person
엔티티를 만들었습니다. 그런 다음 추가 필드가있는 User
엔티티를 만들었습니다. 나는 User
의 상위 엔티티로 Person
을 설정했습니다.NSManagedObject CoreData의 상위 - 하위 계층
그런 다음 '편집자'메뉴에서 'Create NSManagedObject Subclass ...'옵션을 사용하고 이러한 엔티티에 대한 클래스를 생성했습니다.
지금 내가 User* user = [[User alloc] init]
을했을 때 어떤 이유로 user.firstName
이나 다른 수퍼 클래스 Person
에 액세스 할 수 없습니다. 그것은 "속성 firstName은 User * 유형의 객체에서 발견되지 않았습니다."라고 말했습니다. User
클래스는 서브 클래스가 NSManagedObject
이고 Person
이 아닌 서브 클래스입니다. 문제가 있다고 생각하여 User
을 Person
의 하위 클래스로 변경했습니다. 난 정말 내가 잘못 여기서 뭐하는 거지 모르겠어요
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는 클래스를 올바르게 생성해야한다고 생각하고 상자를 그대로 사용할 수 있어야합니다.
I, [및 기타] (http://stackoverflow.com/questions/25703485/coredata-abstract-entity-with-relationship/) XCode GUI에 부모 엔티티 스틱이 없어도 쉽게 알 수 있습니다. 부모 엔티티를 Person으로 설정하는 것만으로도 user.firstName에 액세스 할 수 있습니다. 상속을 확인하기 위해 user.entity.superEntity.name 또는 다른 경로를 쿼리 할 수도 있습니다. – stevesliva