簡體   English   中英

didFinishLaunching永遠不會被調用

[英]didFinishLaunching is never called

我創建了一個新的基於窗口的項目,無法弄清為什么它什么也沒做。 最終,我在didFinishLaunching之后放置了一個NSLog,並且在運行它時從未記錄它。 這是我編寫的所有代碼:

- (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]);

}

這就是我編寫的全部內容,當我在模擬器或設備上運行它時,什么也沒有記錄。 有什么想法嗎?

好吧,您在談論應用程序委托。 顯而易見的原因- 您的對象未設置為應用程序委托

查看Apple文檔,有很多方法可以實現它:

  1. 在Interface Builder中刪除應用程序委托綁定(窗口的.xib文件)
  2. 在main.h中將UIApplicationMain的第4個參數設置為nil以外的其他值。

在Interface Builder中檢查您的nib文件,然后查看是否已安裝App Delegate。

參考文檔 核心應用程序設計

應用程序委托是您在應用程序啟動時提供的自定義對象,通常是將其嵌入到應用程序的主nib文件中。 該對象的主要工作是初始化應用程序並在屏幕上顯示其窗口。 當發生特定的應用程序級事件時,例如當應用程序需要中斷(由於傳入消息)或移至后台(由於用戶輕按“主頁”按鈕)時,UIApplication對象還會通知此對象。


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

嘗試刪除“構建/清理所有目標”,刪除“ Build /”目錄,然后從模擬器和/或設備中刪除該應用程序。 然后再次運行。

作為另一項檢查,請嘗試在applicationDidBecomeActive:記錄一些內容。 無論是在初始啟動時還是從后台恢復時,都會調用此方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM