2011-08-05 15 views
1

私は新しいウィンドウベースのプロジェクトを作成しましたが、何もしていない理由を理解できませんでした。最終的にdidFinishLaunchingの直後にNSLogを置いて、それを実行するとログに記録されません。didFinishLaunchingは決して呼び出されません

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSLog(@"didFinishLaunching"); 

    // Get the device object and turn proximity monitoring on 
    UIDevice *d = [UIDevice currentDevice]; 
    [d setProximityMonitoringEnabled:YES]; 

    // Get the NSNotificationCenter object 
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 

    // Sign up to receive notifications when the proximity state changes 
    [nc addObserver:self selector:@selector(proximityChanged:) name:UIDeviceProximityStateDidChangeNotification object:d]; 
    NSLog(@"Observing..."); 

    [self.window makeKeyAndVisible]; 
    return YES; 

} 

- (void)proximityChanged:(NSNotification *)note { 

    // Print out the changes of proximity state 
    NSLog(@"Proximity Changed: %d", [[note object] proximityState]); 

} 

私が書いたと私はシミュレータ上または私のデバイス上でそれを実行したときに何も記録されません何の全体です:ここで私が書いたコードのすべてです。何かご意見は?

答えて

7

さて、あなたはアプリケーションデリゲートについて話しています。明白な理由 - オブジェクトがアプリケーション代理人として設定されていません。それを達成するためにかなりの数の方法があり、アップルのドキュメントを見てみると

  1. メインにUIApplicationMainの4番目のパラメータを設定してInterface Builderで結合アプリケーションデリゲート(窓用.xibファイル)
  2. を削除します。 hをnil以外のものに置き換えます。

nibファイルをInterface Builderで確認して、App Delegateがセットアップされているかどうかを確認してください。

リファレンスアプリケーションデリゲート Core Application Design

ドキュメントには通常、アプリケーションの メインnibファイルに埋め込むことによって、あなたは アプリケーションの起動時に提供するカスタムオブジェクトです。このオブジェクトの主な仕事は、 アプリケーションを初期化し、そのウィンドウを画面上に表示することです。 UIApplicationオブジェクト は、( が[ホーム]ボタンをタップしたため)アプリケーションが中断する必要がある場合(受信メッセージの なので)、またはバックグラウンドに移動した場合など、特定のアプリケーションレベルイベント が発生したときにもこのオブジェクトに通知します。


第四のパラメータは、アプリケーションデリゲートのクラスを識別する。 アプリケーションデリゲートは、システムとカスタムコード間の上位レベルの の対話を管理します。 を指定すると、アプリケーション委任オブジェクトが アプリケーションのメインnibファイル(Xcodeテンプレートを使用して で構築されたアプリケーションの場合)に配置されていることがUIKitに通知されます。

1

ビルド/クリーンすべてのターゲットを削除し、ビルド/ディレクトリを削除し、シミュレータまたはデバイスからアプリを削除してみてください。その後、もう一度実行します。

別の方法として、applicationDidBecomeActive:に何かを記録してみてください。このメソッドは、最初の起動時か、バックグラウンドからの再開時に呼び出されます。

関連する問題