2014-01-27 3 views
6

단일보기 서식 파일을 사용하여 응용 프로그램을 시작한 후 AppDelegate.m의 application: didFinishLaunchingWithOptions: 메서드의 첫 번째 줄에 NSLog(@"self.window = %@", self.window);을 추가하면 응용 프로그램에 self.window이 있음을 알 수 있습니다.iOS self.window - 언제 만들어 집니까?

그러나 빈 템플릿을 사용하여 응용 프로그램을 시작하고 self.window을 콘솔에 기록하려고하면 결과는 null입니다. 스토리 보드 및보기 컨트롤러를 추가하고 해당보기 컨트롤러를 초기보기 컨트롤러로 설정하고 self.window의 로그를 시도하더라도 결과는 동일합니다.이 값은 null으로 설정됩니다.

그리고 어느 쪽을 선택하든 기본적으로 AppDelegate.h에 @property (strong, nonatomic) UIWindow *window;을 선언하는 것을 볼 수 있습니다. 그래서 나는 왜 첫 번째 경우에 self.window이 초기화되고 후자의 경우에는 값을 설정하는지 알 수 있습니다. 또한 self.window이 이미 선언되고 첫 번째 경우에는 초기화되지만 두 번째 경우에는 초기화되지 않으면 어떻게 초기화 코드를 찾을 수 있습니까?

그것은 두 경우처럼 보인다는 @property 선언은 동일합니다 - 내가 언급 한 두 경우 모두, 나는 AppDelegate.mapplication: didFinishLaunchingWithOptions: 방법의 첫 번째 줄에 self.window의 값을 기록했습니다.

그래서 내가 놓친 것이 있습니까? 왜 두 가지 사례가 코드와 스토리 보드 모두에서 차이점을 찾지 못하고 다르게 행동하는지 모르겠습니다.

iOS 7 및 Xcode 5를 사용합니다. 감사합니다.

답변

7

좋아요, 스토리 보드 또는 Nib로 프로젝트를 만들면 프로젝트 설정에서 스토리 보드/nib가 "기본 인터페이스"임을 프로젝트에 알립니다.

그러면 응용 프로그램이 시작될 때 해당 인터페이스를로드합니다. 이러한 이유 때문에 self.window이 생성 된 것입니다.

빈 응용 프로그램을 만들 때 기본 인터페이스로 설정할 인터페이스가 없습니다.

당신은 ... 이런 식으로 윈도우를 직접 만들 어쨌든이 같은

-(void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    UIViewController *someController = [UIViewController... //create your initial controller 

    [self.window addSubview:navigationController.view]; 
    [self.window makeKeyAndVisible]; 
} 

뭔가해야합니다. 오랜만이야.

빈 응용 프로그램을 만든 다음 초기 nib로 사용할 nib 파일을 추가하는 경우 프로젝트 설정에서 선택할 수 있습니다.

대상에서 일반적으로. "배포 정보"섹션에서 프로젝트의 닙에서 "기본 인터페이스"를 선택하십시오. 그러면 응용 프로그램이 시작될 때 해당 펜촉이로드됩니다.

+0

대단한 답변을 보내 주셔서 감사합니다. 그게 내가 묻는 바로는 ...그런 다음 빈 템플릿을 사용하여 앱을 시작할 때 어떤 방법으로 코드를 작성하거나 Target에 설정하면 좋을까요? – Blaszard

+0

코드 만 사용하고 코드를 전혀 사용하지 않는다면 코드를 작성해야합니다. 첫 번째보기로 펜촉을 사용하는 경우 기본 인터페이스를 설정하십시오. – Fogmeister

0

엑스 코드는 IBOutletAppdelegate에서 객체와 엑스 코드 자체 후크로 UIWindow를 선언 또는 기본 ViewController.nib의 창에 연결 (이 아닌 빈 프로젝트를 생성 할 때 엑스 코드에 의해 만들어진) .There 당신이있는 경우에 어떤 객체를 초기화 할 필요는 없다 Iboutlet으로 선언하고 펜촉으로 UIController와 연결했습니다.

이제 빈 프로젝트에서 창을 생성하려면 콘센트로 선언하고 창에 연결하여 nib에 넣고 AppDelegate를 파일 OWner로 만듭니다.

관련 문제