문제

내 인터페이스 빌더 파일에는 두 개의 컨트롤이 있고 각 컨트롤은 코드에서 별도의 대리자 클래스(Control1Delegate 및 Control2Delegate)를 만들었습니다.인터페이스 빌더에서 두 개의 "객체"를 생성하고 해당 유형으로 만든 다음 컨트롤을 대리자로 연결했습니다.대의원들은 잘 작동합니다.제 문제는 한 대리인의 정보를 다른 대리인에게 공유해야 하는데 어떻게 해야 하는지 잘 모르겠습니다.

이를 수행하는 가장 좋은 방법은 무엇입니까?두 대리자를 하나의 클래스로 결합하거나 둘 다 읽을 수 있는 세 번째 클래스에 액세스하시겠습니까?실제로 내 코드의 어디에서나 클래스를 초기화하는 것이 아니기 때문에 실제 인스턴스에 대한 참조를 얻는 방법(실제 인스턴스가 있는 경우) 또는 "기본" 클래스에 액세스하는 방법을 잘 모르겠습니다. 프로젝트가 함께 왔습니다.

도움이 되었습니까?

해결책

두 대리인의 콘센트를 다른 대리인에게 추가할 수 있습니다.IB의 객체에 아웃렛을 추가하는 방법에는 두 가지가 있습니다(Xcode/IB 버전 3.0 이상을 사용한다고 가정).

  1. 아직 대리자 클래스에 대한 코드를 생성하지 않은 경우 원하는 대리자를 선택한 다음 IB 검사기에서 "객체 ID" 탭을 엽니다.NSObject 유형의 "클래스 콘센트"를 추가합니다.그러면 이 새 콘센트를 다른 대리인에게 설정할 수 있습니다.물론 nib를 로드하기 전에 위임 클래스에 대한 코드를 생성하고 생성된 소스 파일을 Xcode 프로젝트에 추가해야 합니다.

  2. 위임 클래스에 대한 코드를 이미 생성한 경우(또는 NIB에 NSObject를 추가하고 해당 클래스를 Xcode 프로젝트의 기존 클래스로 설정한 경우) 위임 클래스에 인스턴스 변수를 추가합니다.

    IBOutlet id outletToOtherDelegate;

    Xcode 프로젝트가 열려 있는 한(NIB 창 왼쪽 하단에 녹색 거품으로 표시됨) IB는 자동으로 새 콘센트를 감지하고 이를 NIB의 다른 위임 개체에 할당할 수 있도록 합니다.

Cocoa는 NIB 로드 시간에 이러한 콘센트를 자동으로 연결합니다.한 번 awakeFromNib 위임 개체의 인스턴스에서 호출되면 NIB의 다른 모든 개체가 인스턴스화되고 모든 콘센트가 연결되었다고 가정할 수 있습니다.통화에 대한 명령을 가정해서는 안 됩니다. awakeFromNib, 하지만.

다른 팁

내 생각에는 각각에 콘센트를 만들고 교차 바인딩하여 각각이 항상 동일한 데이터를 가질 수 있다고 생각합니다.공유해야 할 모델 객체가 하나 있다면 꽤 깔끔합니다.저는 실제로 이 작업을 수행하는 방법을 모릅니다.언젠가 아이폰 튜토리얼에서 본 것 같아요!

현재 직장에 있기 때문에 내 앞에 Mac이 없지만 한 대리인의 인스턴스를 다른 대리인의 구성원에 바인딩할 수 있습니까?예를 들어 이는 NSArrayController를 다른 컨트롤러 클래스의 멤버에 바인딩하는 것과 유사합니다.

그러나 대리자 클래스가 수행하는 작업에 따라 작업이 유사하다면 아마도 두 클래스를 한 클래스로 결합할 것입니다.그러면 문제가 완전히 해결될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top