2008-09-17 9 views
7

인터페이스 빌더 파일에 두 개의 컨트롤이 있고 각 컨트롤에는 코드 (Control1Delegate 및 Control2Delegate)에 대한 별도의 델리게이트 클래스가 생성되어 있습니다. 인터페이스 빌더에 두 개의 "객체"를 만들었고 그 객체를 해당 유형으로 만들고 컨트롤을 대리인으로 연결했습니다. 대의원은 잘 작동합니다. 내 문제는 한 대의원이 다른 대의원에게 정보를 공유해야한다는 것이고, 어떻게 확신 할 수없는 것입니다.Objective-C의 델리게이트 클래스 연결하기

가장 좋은 방법은 무엇입니까? 두 명의 대리인을 하나의 클래스로 결합하거나, 둘 다 읽을 수있는 세 번째 클래스에 액세스하십시오. 실제로 코드를 어디서나 클래스를 초기화하지 않기 때문에 실제 인스턴스가있는 경우 해당 인스턴스에 대한 참조를 얻는 방법을 모르거나 "실제"인스턴스에 대한 참조를 얻는 방법을 모르겠습니다. 프로젝트가 함께했다.

답변

8

대리인을 다른 대리인에게 추가 할 수 있습니다.

아직 대리자 클래스에 대한 코드를 생성하지 않은 경우
  1. 원하는 선택 : IB에서 개체에 출구를 추가하는 방법은 두 가지가 있습니다 (나중에 엑스 코드/IB 버전 3.0 이상을 사용하는 가정 위젯을 실행 한 다음 IB 속성의 "Object Identity"탭을 열고 NSObject 유형의 "Class outlet"을 추가하면이 새로운 콘센트를 다른 대리자로 설정할 수 있습니다. 물론 코드를 생성해야합니다. 펜을로드하기 전에 대리자 클래스를 생성하고 생성 된 소스 파일을 Xcode 프로젝트에 추가하십시오.

  2. 위임 클래스의 코드를 이미 생성했거나 NSObject를 NIB에 추가하고 클래스를 엑시스 팅 Xcode 프로젝트에서 클래스), 대리자 클래스에 인스턴스 변수를 추가하십시오에서 녹색 거품으로 표시된 바와 같이

    IBOutlet id outletToOtherDelegate;

    을만큼 Xcode 프로젝트가 열려있는 (당신의 NIB 창 왼쪽 아래), IB는 자동으로 새 콘센트를 감지하고이를 NIB의 다른 대리인 객체에 지정할 수 있습니다.

코코아는 NIB로드 시간에이 콘센트를 자동으로 연결합니다. 대리자 객체의 인스턴스에서 awakeFromNib이 호출되면 NIB의 다른 모든 객체가 인스턴스화되어 모든 콘센트가 연결되었다고 가정 할 수 있습니다. 그러나 awakeFromNib으로 전화를 걸면 안됩니다.

1

각 콘센트를 만들고 교차 바인딩하여 항상 동일한 데이터를 유지할 수 있다고 생각합니다. 그들이 공유해야하는 하나의 모델 객체가 있다면 그것은 꽤 정돈 된 것입니다. 나는 이것을 실제로하는 방법을 모른다. 나는 iPhone 튜토리얼에서 한 번 보았다고 생각합니다!

1

저는 직장에 출근 한 현재 내 Mac을 가지고 있지 않지만 한 대의원의 인스턴스를 다른 대의원에게 바인드 할 수 있습니까? NSArrayController를 다른 컨트롤러 클래스의 멤버에 바인딩하는 것과 비슷합니다.

그러나 위임 클래스가 수행하는 작업에 따라 작업이 비슷한 경우에는 한 번 클래스에 결합해야합니다. 그러면 문제가 완전히 사라집니다.

관련 문제