2012-05-23 2 views
0

OSX Lion 용 Cocoa 앱을 빌드하려고합니다. 나는 내 AppController가 코드에서이 라인을 가지고 :ViewController에서 AppController를 호출하는 방법

self.viewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil appController:self]; 
[_view addSubview:[_viewController view]]; 
[[_viewController view] setFrame:[_view bounds]]; 

LoginViewController은 다음과 같습니다

@implementation LoginViewController 

@synthesize appController = _appController; 

- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil appController:(AppController *)appController { 

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     [self setAppController:appController]; 
     NSLog(@"Appcontroller init: %@", _appController); 
    }  

    return self; 
} 

- (IBAction)login:(id)sender { 

    NSLog(@"Appcontroller login: %@", _appController); 
} 

로그인 방법은 버튼 클릭에 연결되어 있습니다.

로그 :

2012-05-23 12:45:49.574 QBLoader[3241:503] Appcontroller init: <AppController: 0x7fe2ab210440> 
2012-05-23 12:45:52.085 QBLoader[3241:503] Appcontroller login: (null) 

왜 두 번째 로그 라인 널은?

+0

값이 변경되는지 확인하기 위해 @synthesized 줄에 중단 점을 추가하려고 했습니까? 두 줄 모두에서 동일한 객체를 가져 오도록 self를 기록 할 수도 있습니다. – gaige

+1

'LoginViewController'인스턴스가 두 개 이상 생성 될 수 있습니까? 예를 들어 IB가 하나입니다. 'NSLog' 둘 다에서'% p'를 사용하여'self'를 출력하면 일치합니까? – sbooth

+1

확인 LoginViewController 인스턴스가 여러 개있는 것 같습니다. 나는 그것이 가능한 방법을 얻지 못한다. – brasimon

답변

0

LoginViewController의 인스턴스가 두 개 이상 있다고 표시 했으므로 xibs에서 해당 유형의 객체를 어디서 만들었는지 확인합니다. 특히 -login: 동작을 연결하는 xib부터 시작하겠습니다. AppController의 인스턴스가 하나 뿐인 경우 일반적인 방법은 MainMenu.xib에 개체를 만들어 앱의 대리인에있는 콘센트에 연결하는 것입니다. 그런 다음 [[NSApp delegate] appController]과 같은 것을 사용하여 액세스 할 수 있습니다.

관련 문제