2016-04-15 14 views
0

私は本から次の目的のCを教えています:本から直接コピーしてコードに3行しか書いていませんが、大きなNerd Ranchガイドとアプリケーションがクラッシュしています。ここでは、それをクラッシュさせているコードです。appdelegateからウィンドウを設定しようとしています

#import "AppDelegate.h" 

@interface AppDelegate() 

@end 

@implementation AppDelegate 

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

    CGRect windowFrame = UIScreen.mainScreen.bounds; 
    UIWindow *theWindow = [[UIWindow alloc] initWithFrame:windowFrame]; 
    [self setWindow:theWindow]; 


    return YES; 

} 

本は誤植があることが知られており、別の考えは多分これの一部が廃止されていることでしょうか?どんな助けも大歓迎です。ありがとうP

EDIT ------------------------------------------- -------------------------------------------------- --------------------------------

アプリケーションをクラッシュされたラインである:

[自己setWindow:theWindow];

とクラッシュする理由:

'NSInternalInconsistencyException', reason: 'Application windows are expected to have a root view controller at the end of application launch' 

多分ビューがappDelegateに設定し、もういないと仕事に使用されるコードは、今クラッシュし、なぜこれがあることに使用される場合、私はちょうど疑問に思って?

+0

本は何歳ですか?マスターディテールテンプレートを使用してXcodeでプロジェクトを作成しましたか?あなたは一般的に自分自身でウィンドウを作成することはほとんどありません... – Wain

+0

クラッシュに関する質問を投稿するときには、完全で正確なエラーメッセージを提供するだけでなく、クラッシュを引き起こすコードの正確な行を指摘する必要があります。 – rmaddy

+0

FYI - クラッシュをデバッグする方法については、http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1を参照してください。 – rmaddy

答えて

0

私は、AppDelegateのexecutinoの最後にView Controllerを用意する必要があると思うので、アプリはユーザーに何かを表示します。

あなたは(「アプリケーションウィンドウはアプリケーションの起動の最後にルートビューコントローラを有することが期待される」 - >エラー・メッセージ)ストーリーボード上の最初のビューコントローラを設定する必要があります例えば

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"YOURSTORYBOARDNAME" bundle:nil]; 
UIViewController *initViewController = [storyBoard instantiateInitialViewController]; 
[self.window setRootViewController:initViewController]; 

これは役に立つと思います。

0

ウィンドウを正しく設定しています。問題は、didFinishLaunchingWithOptions:メソッドの最後に到達する前に、ある時点でウィンドウのrootViewControllerプロパティにUIViewControllerを割り当てる必要があることです。

ie。

#import "AppDelegate.h" 

@interface AppDelegate() 

@end 

@implementation AppDelegate 

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

    CGRect windowFrame = UIScreen.mainScreen.bounds; 
    UIWindow *theWindow = [[UIWindow alloc] initWithFrame:windowFrame]; 

    UIViewController *viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
    theWindow.rootViewController = viewController; 

    [self setWindow:theWindow]; 


    return YES; 
} 
@end 
0

複数のウィンドウを使用する場合を除いて、ウィンドウを設定する必要はありません。ストーリーボードの導入により、最初のView Controllerをルートコントローラとして設定すると、このView Controllerは自動的にロードされます

関連する問題