2012-02-15 4 views
2

NSManagedObject에 대한 사용자 지정 코드를 하위 클래스의 범주에 넣는 것이 일반적입니다. 모델을 편집 할 때 Xcode에서 생성 된 하위 클래스를 덮어 쓰게되므로이 클래스의 하위 클래스에 사용자 지정 코드를 넣는 것이 일반적입니다. 나는 이것을 확인하고 싶었다. 클래스 계층에 이미 구현 된 메소드와 카테고리를 결합하는 것이 좋지 않다고 사람들이 말하는 사례를 보았습니다. 나는 이것이 실제 범주를 가진 클래스가 이미 구현 된 메서드를 가지고 있거나 모든 경우에 해당하는 경우에만 해당하는지 확실하지 않습니다.범주가있는 NSManagedObjects

+0

저는 오랜 시간이 질문에 어려움을 겪었으며 마침내 객체 계층 구조를 수정 한 솔루션을 사용했습니다. 여기에 관심이 있다면 여기에서 읽을 수 있습니다 : http://bikepress.org/?p=1120. – chris

답변

3

범주의 메서드를 재정의하는 문제는 일반적으로 [super doSomething]을 사용하는 것처럼 원래 구현을 호출 할 수 없다는 것입니다. 보통, 메소드를 오버라이드 (override) 할 때, 원의 구현이 실행되기 전이나 혹은 후에, 여분의 일을하고있는 원래의 구현을 호출 할 수 있도록 (듯이)하고 싶다.

아주 깨끗한 해결책은 Xcode가 직접 만지지 않는 NSManagedObject 하위 클래스를 생성하도록하는 것입니다. 대신, 덮어 쓰는 것에 대해 걱정하지 않고 편집 할 수있는 각 Xcode 생성 NSManagedObject 하위 클래스의 다른 사용자 정의 하위 클래스를 만듭니다.

Wolf Rentzsch의 mogenerator은 기본적으로이 방법을 사용하며 Xcode가 생성하지 않는 편리한 편리한 메소드를 추가로 생성합니다. 유용한 도구가 될 수 있기 때문에 체크 아웃 할 가치가 있을지 모르지만, 발전기는 당신이하려는 일을 수행 할 필요가 없습니다.

+2

자동 생성 NSManagedObject 하위 클래스의 하위 클래스를 사용하는 경우 - 관계를 어떻게 처리합니까? 객체 A는 객체 B를 가지고 doSomething 메서드를 호출하려고하지만 doSomething은 B의 내 하위 클래스에서 정의되지만 Core Data는 B의 하위 클래스를 반환하지 않습니다. 실제로 B를 반환합니다.이 예제를 어디에서 찾을 수 있는지 알고 있습니까? – Brian

+0

@Brian이 질문에 대한 늦은 답변이라는 것을 알고 있습니다. 그러나 여기에 그것을 고칠 수있는 방법이 있습니다. 자동 생성 된 NSManagedObject 하위 클래스에서 속성을 사용할 수 없게 만듭니다. 그것은 사용자 정의 메소드 만 포함합니다 (즉, 추상화 할 수도 있습니다). 그런 다음 클래스 A는이 클래스를 서브 클래스화할 수 있으며 고유 한 특성을가집니다. 클래스 B에 대해서도 마찬가지입니다. 클래스 B의 메소드를 호출하면 클래스 B가 다른 자동 생성 NSManagedObject에서 해당 메소드를 상속하기 때문에 클래스 B의 메소드가 호출됩니다. 간단히 말해, 수퍼 클래스는 인터페이스 (또는 Obj-c의 프로토콜)가됩니다. 그리고 하위 클래스는이 인터페이스를 구현하는 데이터 저장소입니다. –

+0

@ 브라이언 물론 앤드류의 대답을 뒤집습니다. 이제 수퍼 클래스가 (Core Data 관점에서) 건드릴 수 없기 때문에 하위 클래스는 원하는대로 데이터를 변경할 수 있습니다. –

관련 문제