2014-07-23 2 views
0

내가하고있는 것 코코아 프로그래밍 : Mac OS X 4th Edition의 경우 11 장에 있습니다. "기본 핵심 데이터"와 나는 -(id)newObject이 어떻게 호출되는지 알 수 없습니다.코어 데이터에서 -newObject가 어떻게 호출 되나요?

add:carArrayController에 연결하지만 그게 전부입니다. 에 carArrayController을 추가하면 -(id)newObject이 호출되지 않습니다. 이것은 어떤 종류의 계층 호출 시스템이 있지만 그 주제에 대한 정보를 찾을 수 없다는 것을 말해줍니다. 어떻게 불려지나요?

-(id)newObject은 NSObjectController에서 가져온 것입니다.

+0

[설명서] (https://developer.apple.com/librarY/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSObjectController_Class/Reference/Reference)에없는 것을 묻는 질문이 내게 명확하지 않습니다. .html # // apple_ref/doc/uid/20002044-BBCEAICF). – stevesliva

답변

0

CarArrayController는 NSArrayController의 하위 클래스입니다. CarArrayController 하위 클래스에서 -add:sender을 재정의하는 경우 -newObject이 호출되는 -add:sender의 NSArrayController 메서드에 있으므로 메서드에 [super add:sender];이 있어야합니다. 서브 클래스의 메소드를 오버라이드 (override)하는 경우, 종종 메소드의 구현으로 super를 호출 할 필요가 있습니다.

+0

버튼 어떻게 추가합니까? 그것은 add-to : -newObject를 호출해야한다는 것을 알고 있습니다. 아무데도 명시 적으로 연결하거나 호출하지 않았습니다. 그런 다음 추가 할 경우 - (void) add : (id) 발신자가 어떻게 했습니까? add에 링크를 추가 : 호출해야한다는 것을 알고 있습니다. - (id) 발신자가 아닌 - (id) newObject. – Kuebeker

+0

'-add : sender'를 오버라이드하고'-newObject'가 호출되지 않는다고 결정했습니다. '[super add : sender];를 호출하여 제대로 재정의하면 호출됩니다. 'add : sender'를 오버라이드하지 않으면 이미'super'를 통해 호출됩니다. NSArrayController ('super')가 그 메소드를'-add : sender'라고 부를 때, NSArrayController의 메소드는'-newObject'가 호출되는 곳입니다. NSArrayController는 NSObjectController의 하위 클래스이므로 구현 초기에'[super newObject];를 호출 할 가능성이 높습니다. – mikeD

+0

나는 그것을 알아 냈으므로 내 의견을 바꾸려고했으나 당신은 대답했습니다. 나는 이것과 관련된 문서를 찾으려고 노력했지만 아무 것도 발견하지 못했다. 이 문제에 대한 문서가 존재합니까? 아니면 오류로 인한 시험의 경우입니까? 명시 적으로 문서에 쓰여진 것인가? add : 존재하는 경우 newObject를 호출하거나 그것이 무엇을 찾는 지의리스트를 호출 할 것인가? – Kuebeker