2011-08-05 67 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

那麼,你在談論應用程序委託。顯而易見的原因 - 您的對象未設置爲應用程序代理

縱觀蘋果的文檔有相當多的方法來完成它:在Interface Builder

  1. 刪除應用程序委託綁定(爲窗口的.xib文件)的主要UIApplicationMain的
  2. 設置4個參數。 h不是零。

檢查你在Interface Builder中的nib文件,看看是否安裝了App Delegate。

參考文檔 Core Application Design

應用代表是您提供的 應用程序啓動時,通常是在應用程序的 主要筆尖文件中嵌入一個自定義對象。此對象的主要工作是初始化應用程序並在屏幕上顯示其窗口。 UIApplication對象 還會在特定應用程序級別事件 發生時(例如應用程序需要中斷(因爲傳入消息的 )或移動到背景(因爲用戶 點擊了主頁按鈕)而通知此對象。


第四個參數標識類應用程序委託的。 應用程序委託負責管理系統和您的自定義代碼之間的高級別 交互。指定nil 告訴UIKit應用程序委託對象位於 應用程序的主要nib文件中(使用Xcode模板構建 的應用程序就是這種情況)。

1

嘗試刪除執行Build/Clean All Targets,移除Build /目錄並從模擬器和/或設備中刪除應用程序。然後再運行一次。

作爲另一項檢查,請嘗試在applicationDidBecomeActive:中記錄某些內容。無論是在初始啓動還是從後臺恢復,都會調用此方法。