2012-07-22 1 views
9

짧은 질문 엑스 코드의 인터페이스 빌더의 개체 라이브러리에 Object라는 일이 있습니다Storyboard의 객체 라이브러리에서 "객체"는 무엇을 할 수 있습니까?

. 나는이 "목적"을 사용함으로써 어떤 종류의 일이 성취 될 수 있는지 궁금합니다.

구체적으로 말씀 드리면, Storyboard (또는 xib)에 NSObject입니다. 다음과 같이 설명됩니다 :

Interface Builder에서 직접 사용할 수없는 개체에 대한 템플릿을 제공합니다. 사용자 정의 클래스 속성을 사용하여이 객체를 모든 클래스의 인스턴스로 만들 수 있습니다. 나는 UISearchController와 함께 UITableViewController를 구축하기 위해 노력하고있어

긴 질문. 그들은 모두 UITableViewDelegateUITableViewDatasource을 위임자로 구현해야하므로 UISearchController 대리인을 UITableViewController이 아닌 다른 객체에 할당 할 수 있기를 바랍니다.

저는 이것을 실현하기 위해 대리인을 수동으로 viewDidLoad에 할당하는 대신 Storyboard에서이를 수행 할 방법을 찾고 있습니다. 특히, 스토리 보드에서 Object이 어떻게 작동하는지 파악하면됩니다.

저는 UITableView의 부모를 시험하여 구별 할 수 있음을 이해합니다. 그러나 논리를 다른 객체로 분리하는 것이 항상 좋습니다. 구현이 쉽고, 효율성이 높으며, 구조가 잘되고, 재사용이 가능할 것입니다.

미리 감사드립니다. 나는 스토리 보드에서 UITableViewController 동일한 수준 (당신은 다른 UIViewController 내에서 Object을 넣을 수 없습니다)에서 Object을 넣어

  • 을 시도 무엇

    .
    UITableViewController@property (nonatomic, weak) IBOutlet NSObject *과 연결하십시오.
    NSObject *viewDidLoad에 인쇄 할 때 nil 포인터로 밝혀졌습니다. 불운.

  • 속성을 @property (nonatomic, strong)으로 변경하면 nil 대신 UICustomObject이됩니다. 제대로 된 것 같아.
+0

'Object'는 사용자 정의 클래스와 입력 및 출력에 대한 인터페이스 빌더 링크를 제공하는 데 사용됩니다. – esqew

+0

나는 그것을 얻고 있다고 생각한다. 놀고 싶어. 댓글 주셔서 감사합니다. –

답변

9

참고로 Object는 사용자 지정 클래스를 비롯한 모든 클래스의 개체가 XIB/Storyboard가로드 될 때 인스턴스화되도록 만듭니다. UICustomObject를 얻고 있다는 사실은 XIB/Storyboard 로딩 기계가 어떤 클래스의 객체인지 알지 못하거나 지정한 런타임 조회를 통해 클래스를 찾을 수 없다는 것을 나타냅니다.

이 솔루션은 사용자 정의 클래스 관리자에서 개체에 적합한 클래스를 지정할 수 있는지 확인하는 것입니다 :

enter image description here 그럼 당신은 또한 확인해야 물론

그 클래스의 구현 파일 질문은 프로젝트에 있으며 목표에 포함됩니다.

마지막으로 사용자 지정 개체를 가리키는 IBOutlet에 strong을 사용하는 것이 가장 좋습니다. 최상위 개체이고 최상위 개체는 strong 속성을 사용하여 참조해야하기 때문입니다. (만약 당신이 정말로 궁금하다면 Mike Ash는 OS X와 ​​iOS의 차이점을 포함하여 XIB/Storyboard 아울렛 메모리 관리의 특성에 대해 좋은 article을 가지고 있습니다.)

+0

좋은 설명을 해주셔서 감사합니다. 이 외에도 흥미로운 사실을 발견했습니다. 1.이 객체는 런타임에 Storyboard에 의해 생성되므로 이니셜 라이저에 대한 인수를 지정할 수 없습니다. 2. 객체 자체를 세그 (segue)에 연결하거나 호출 할 수 없으므로 주 뷰 컨트롤러를 호출해야합니다. –

+0

친애하는 @AndrewMadsen, 당신은 이것에 대한 대답을 알 수 있습니다 .. http://stackoverflow.com/q/26043973/294884 ... 나는이 신비한 "오브제"객체와 관련이 있습니다! 건배 ... – Fattie

5

이 질문은 답변으로 표시되었습니다.

http://www.objc.io/issue-13/behaviors.html

: 저자는 "행동"이라고 말한다 하나의 역할 클래스로 기능을 파괴 - 그것은 복수 응답이있을 수있는 열린 질문이기 때문에하지만, 당신이 말한대로 수행하는 영리한 방법이있다

요점은 예를 들어 콘센트를 여러보기에 표시하여 시차 효과를 수행하는 개체를 작성할 수 있다는 것입니다. 스크롤 뷰 대리자로 설정되고 구성 가능한 설정을 기반으로 다른 뷰를 업데이트합니다. 앞에서 언급했듯이 생성자에 인수를 전달할 수는 없지만 @ Andrew의 대답은 이미지에 표시된 키 경로 메커니즘을 통해 매개 변수를 지정할 수 있습니다.

여러분도 알다시피, 스크롤 이벤트 등에 응답하는 다른 객체를 갖고 싶은 곳에 문제를 일으킬 수 있습니다. 저자는 간단한 멀티플렉서를 코딩하여이 문제를 해결했습니다. 책임 패턴 체인 http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern으로이를 해결할 수도 있습니다.

마지막으로 @Andrew는 그의 대답에서 객체를 강력한 속성으로 저장하는 중요성을 언급했습니다. 그들은 앞서 언급 한 기사를 작성하여 "Krzysztof"라고 부르며 obj-c 관련 객체 메커니즘을 사용하여 코드없이 구성 가능성을 허용하는 솔루션을 제공합니다. 귀하의 주행 거리는 이것과 매우 유사 할 수 있으며, 스위프트로는 더 좋은 옵션이있을 수 있지만, 적어도 생각하면 좋은 음식입니다.