2012-04-08 2 views
3

스토리 보드를 XIB로 대체하려면 어떻게해야합니까?XIB와 스토리 보드 교체

동적으로 뷰와 컨트롤러를 만들려고하면서 새로운 스토리 보드의 장점을 모두 잃었습니다. 이제는 프로젝트에서 제거하려고 할 때 자체 컨트롤러로 새 XIB를 만들고 프로젝트 설정에서 바꾸 었습니다.
enter image description here
이제 응용 프로그램을 실행하려고하면 충돌이 발생하고 로그에 다음과 같은 메시지가 표시됩니다 : UIRootWindow : 여기서

2012-04-08 14:50:16.567 Bazaart[11340:15203] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x8c15c20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.' 

은의 코드

#import <UIKit/UIKit.h> 
@interface UIRootWindow : UIViewController 
@end 

는 그 대응하는 구현 :

#import "UIRootWindow.h" 
@implementation UIRootWindow 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    return self; 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 
- (void)viewDidUnload { 
    [super viewDidUnload]; 
} 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 
@end 
012,351,

편집 :
필립 (필자 참조)이 제안한 바와 같은 창이 있습니다. 하지만 ... 내가 한 방식대로하는 것이 최선이 아닌 것 같습니다. 내가 제대로하고 있니?

UIRootWindow *wnd = [[UIRootWindow alloc] init]; 
[wnd view]; 
[self setWindow:wnd.window]; 
+2

미래의 호환성을 위해서 자신의 클래스 이름을'UI' 또는'NS'로 시작해서는 안됩니다. (SDK의 차기 버전에서는 Apple이'UIRootWindow'라는 새로운 클래스를 도입한다고 상상해보십시오). 자신 만의 접두어를 사용하면'URKRootWindow'와 같은 것을 얻을 수 있습니다. –

답변

7

주 인터페이스 필드에 아무 것도 넣지 마십시오. 대신, 앱 위임자의 didFinishLaunchingWithOptions : 메소드에 최상위 컨트롤러를로드하고 여기에 윈도우의 루트 컨트롤러를 설정하십시오.

응용 프로그램 시작시 언급 한 xib에 UIApplication 인 File 's Owner가 있다고 가정합니다. (이전 템플릿을 사용했는데 일부 샘플 프로젝트는 여전히 수행합니다.)

+0

감사합니다. 그것은 효과가있었습니다. 비록 그들이 창문을 붙이는 방법이 최적이 아니라고 생각합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? – UrK

+0

단일보기 컨트롤러 템플릿 (스토리 보드 없음)을 사용하여 새로운 테스트 앱을 만들고 앱 델리게이트에서 어떻게 설정했는지 살펴 보시기 바랍니다. 기본적으로 첫 번째 컨트롤러 (또는 포함 컨트롤러가있는 경우)를 위임자의 'window.rootViewController'에 할당합니다. –

+0

감사합니다. 이것은 분명히 내 질문에 대답했다. 나 자신에 대해서 생각해 봤어야 했어. – UrK

0

앱을 시작할 때 XIB의 각 컨트롤러는 설정 한 클래스 이름을 기반으로 만들어집니다. 시각적으로 연결된 각 속성은 KVC를 사용하여 설정됩니다. 오류는이 프로세스의 어딘가에서 'view'속성이 올바르지 않다는 것을 알려줍니다. 이런 일이 될 수있는 이유는 두 가지 이유

을 생각할 수 있습니다 :

  • 당신은 당신의 ViewController에 설정된 권리 클래스 또는합니다 ('아이덴티티 인스펙터'에서) 당신의 XIB의 다른 개체
  • 이 없습니다
  • 연결을 올바르게 배선하지 않았습니다. (Connections Inspector에서)

어느 쪽이든, '보기'속성이 연결된 XIB의 설정을 신속하게 확인할 수 있습니다.