[App 개발] 클레스 외부의 변수를 사용하네요? ;;;
본문
일단 AppDelegate.h에
@interface AppDelegate : NSObject {
IBOutlet UIWindow *window;
IBOutlet UINavigationController *navigationController;
NSMutableArray *books;
sqlite3 *database;
}
@end
이렇게 선언이 되어있습니다. (프로퍼티랑 기타 함수는 생략했습니다.)
그리고 MasterViewController.h는 이렇구요.
#import
@class DetailViewController, AddViewController, EditingViewController, Book;
@interface MasterViewController : UIViewController {
IBOutlet UITableView *tableView;
UINavigationController *addNavigationController;
DetailViewController *detailViewController;
AddViewController *addViewController;
}
@end
그런데 궁금한게 MasterViewController.m에서 AppDelegate에서 선언된 navigationController 오브젝트를 사용한다는 겁니다.
밑에가 MasterViewController에서 navigationController를 사용하는 함수입니다.
- (IBAction)addBook:(id)sender {
AddViewController *controller = self.addViewController;
controller.book = [[[Book alloc] init] autorelease];
if (addNavigationController == nil) {
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:controller];
self.addNavigationController = navController;
[navController release];
}
//이부분입니다.
[self.navigationController presentModalViewController:addNavigationController animated:YES];
[controller setEditing:YES animated:NO];
}
MasterViewController에서는 navigationController를 선언하지도 않았고, 여기 이외에서는 저 변수명을 볼 수도 없네요...
물론 AppDelegate에서도 전역으로 선언한것처럼 보이지 않구요...
Scoope개념이 C++같은것과 좀 다른가요?
이게 어떻게 가능한지 알려주세요. ㅜㅜ
혹시하는 마음에 코드도 올립니다. (그런데 이 코드 올렸다고 애플쪽에 뭔가 문제되지는 않겠죠? ;;;; )
최신글이 없습니다.
최신글이 없습니다.
댓글목록 2
hongjuny님의 댓글
샘플 코드는 배포된 형태 그대로 재배포해도 상관없다고 설명서에 써 있으니 괜찮을 겁니다. ^^
그건 그렇고, navigationController 인스턴스는 바로 위에서 UINavigationController 클래스로 선언되어 addNavigationController 메쏘드로 등록된 것 같은데요?
나도맥님의 댓글
답변 감사합니다. 그런데 UINavigationController클레스로 navigationController를 선언 해 놓은 클레스는 AppDelegate고
지금 self.navigationController로 사용중인 클레스는 MasterViewController라 이해가 안되는 중입니다.
self란 소리는 자기가 가지고 있는 변수나 메소드만을 사용한다는 소리로 알고 있는데 저 [self.navigationController presentModalViewController:addNavigationController animated:YES];구문이 있는 클레스내에선 navigationController라고 선언된 것이 아무것도 없어서 질문을 했었습니다.
C++경우에 다른 클레스의 변수는 상속을 받던지 하는 경우만 사용 가능하지 않나요?
라고 해놓고 문득 도큐먼트를 찾아보니 UIViewController Class 에 따로 navigationController란 property가 있네요... AppDelegate에서 선언한 넘이랑은 다른 넘인가봅니다... 왜 이름이 똑같아서 ㅜㅜ
(맞나 모르겠네요 ;; )