온라인 튜토리얼과 Apple docs를 읽었지만 Cocoa 앱을 작성하는 데 새로운 사람 (임베디드 C/C++ 펌웨어 & 네트워킹 코드) 코코아 바인딩의이 어두운 예술은 나에게 이해가 가지 않습니다.문서 기반 Swift 앱의 Cocoa 바인딩에 대한 겉으로보기에 어두운 배경
1) Xcode에서 MacOS Cocoa 응용 프로그램을 기반으로 문서를 만들었습니다.
2) 그 안에는 DocumentData
이라는 하위 클래스 인 NSObject
이 생성되었습니다.
3) DocumentData
은 "foo"및 "bar"이고 두 개의 "동적"속성은 모두 Strings
입니다.
4) NSDocument
의 My Document
하위 클래스에는 docData
이라는 DocumentData
속성이 있습니다. 내 Document
클래스의 makeWindowControllers()
방법에서
5), 나는 self.addWindowController(windowController)
후, 다음을 추가하여 docData
속성을가되도록 viewController
의 표현 객체를 설정합니다
if let viewController = windowController.contentViewController as! ViewController? { viewController.representedObject = self.docData }
6)보기에서 Controller Scene View Controller View에 두 개의 NSTextFields
을 추가하고 "Foo"와 "Bar"라고 각각 부릅니다.
7) 필자는 Assistant를 사용하여 View Controller swift code 창으로 끌어서보기 컨트롤러에 IBOutlets
두 개를 생성하여 각각 "foo"및 "bar"라고합니다.
8) 내 Document
클래스의 read()
방법에서, 나는 두 줄의 코드가 docData
개체의 두 가지 속성 세트에 추가 :이 시점에서
docData.foo = "foo"
docData.bar = "bar"
을, 나는 코코아 바인딩을 얻을 수 있는지 생각 제대로 설정, 응용 프로그램의 "파일"메뉴에서 "열기"를 사용하여 내 응용 프로그램의 파일 확장명을 가진 문서를 열면 제목이 선택된 파일의 이름으로 설정되고 두 파일 NSTextField
창에있는 객체는 각각 "foo"및 "bar"라고 말합니다.
문제는 이러한 바인딩을 수행하는 방법에 대해 완전히 혼란 스럽습니다. 바인딩을 수행하는 방법이 다른 10 가지 예제를 보았지만 나에게 맞는 것은 없습니다.
NSArrayController
을 View Controller에 추가해야합니까?
NSObjectController
을 View Controller에 추가해야합니까?
정확히 XCode의 말도 안되는 UI에서 정확히 바인딩을 설정해야합니까?
이 작업은 매우 간단 할 것이라고 확신하지만, 이해가 가지 않습니다. Xcode IDE에 대한 경험이 많지 않은 온라인 자습서에 대한 도움말이나 포인터는 온라인에서 찾은 것보다 훨씬 좋습니다.
이 기사가 나에게 효과적 일 때 나는 어딘가에 github에 코드를 올려 놓고 Xcode의 사악한 IDE로 인해 다른 개발자가 이러한 바인딩과 관련하여 어려움을 겪을 수 있도록 도와 주겠다.
어제 밤 (문자 적으로 XCode에서 제 2 일째) 시험해 보았습니다. 디버거 출력에 예외가 발생하여 뭔가 잘못하고있을 것임을 알았고 다른 방법을 찾고있는 웹에갔습니다. 바인딩을해라. 그것은 당신의 길을했고 & 예외를 다시 얻었다. 하지만 필자는 기본 문서 기반 응용 프로그램이 Apple이 시작한'ViewController' 템플릿에서'representingObject'를 재정의한다는 사실을 추적했습니다. 'override var representObject : Any? '에 대한 호출을 꺼 냈고 이제는 작동합니다! 도와 줘서 고마워. –
다행입니다. –
편집 가능한 경우'NSController'의 서브 클래스에'NSTextField'을 바인드하십시오. 그것은 더 잘 작동합니다. 'NSController'는'NSEditor'와'NSEditorRegistration' 비공식 프로토콜을 구현합니다. [NSControllers가 유용한 이유는 무엇입니까?] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/WhatAreBindings.html#//apple_ref/doc/uid/20002372-177085) – Willeke