2011-08-04 2 views
0

데이터를 올바르게 저장할 수있는 NSDocument 클래스를 Cocoa App에 성공적으로 구현했습니다. 그러나 파일을 열 때 문제가 발생합니다.NSDocument의 readFromData 오른쪽 창 얻기 :::

이것은 내 기본 설정이다 처리 클래스

FileClass 같은

NSDocument을 MyFile == XIB 파일 => MyFile.xib

NSObject의 FileClass 압축 클래스 인/압축 해제 MyFile.xib의 창 텍스트 필드에 연결됩니다. 저장은 기본 NSNotificationCenter를 통해 수행됩니다. 원시 NSString을 포함하지 않으므로이 클래스에서 데이터를 처리해야합니다.

내가 열어야하는 세 개의 문서가 있다고 가정 해 봅시다. NSNotificationsCenter를 통해 데이터를 전송하는 세 개의 NSDocument 인스턴스가 있습니다. 3 개의 NSDocuments가 있기 때문에 3 개의 Window와 3 개의 FileClass 인스턴스가 있습니다. 이제는 수신 된 데이터가이 창에 제안되는지 여부를 필터링 할 수있는 가능성이 없으므로 올바른 FileClass가 데이터를 수신하면 운이 좋습니다. 무작위 FileClass가 파일을 처리하고 관련 Text View의 텍스트를 설정합니다. 그렇게 생각되었던 데이터를 표시 할 수있는 윈도우 (1)가 윈도우 (3)

에 도시되는 데이터 흐름 :

NSDocument => readFromData => NSNotificationCenter => 랜덤 FileClass => 연관된 텍스트 뷰.

범위를 좁히려면 어떻게 데이터를 올바른 창으로 라우팅합니까?이 구조에 FileClass를 어떻게/어디에 포함합니까?

미리 감사드립니다. 당신이 당신의 시청 클래스에 알림 센터를 통해 문서 데이터를 강제해야하는 경우

답변

1

그것은 주요 설계 결함에 대한 표시입니다. 왜 그렇게해야합니까? 당신은 어떤 이슈를 우회하려고합니까?

+0

당신 말이 맞아요. 내 사용자 정의 클래스를 NSDocument 클래스에서 구현할 수 있습니다. 그렇다면 텍스트 필드에 어떻게 접근합니까? 인터페이스 뷰어의 NSDocument 클래스에 텍스트 뷰를 바인드 할 수 없습니까? 아니면 틀 렸습니다. – Paul

+0

물론 가능합니다! NSDocument는 컨트롤러 클래스 그룹에 속합니다. 즉, 모델 클래스 (읽은 데이터)에서 정보를 가져 와서 해석하고 사용자의 뷰 클래스 (텍스트 뷰, 사용자 정의 뷰 등)로 보냅니다. 상호 작용. Interface Builder에서 XIB 파일을로드하는 NSDocument의 인스턴스는 실제로 "File 's Owner"라는 XIB로 설정됩니다. 따라서 IB에서는 "File 's Owner"상자가 실제로 NSDocument의 인스턴스입니다. – Fabian

+0

NSDocument는 초기화되고 XIB 및 모든 인터페이스 항목이로드되기 훨씬 전에 디스크에서 데이터를 읽습니다. 즉, 디스크에서 읽은 것을 저장하거나 적어도 그 데이터를 NSDocument의 일부 인스턴스 변수에 저장하는 몇 가지 모델 클래스가 필요하므로 나중에 데이터로 뷰를 채울 수 있습니다. – Fabian

관련 문제