didFinishLaunching永远不会被调用

时间:2011-08-05 22:09:54

标签: iphone objective-c ios

我创建了一个新的基于窗口的项目,无法弄清楚它为什么没有做任何事情。最后我在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]);

}

这是我写的全部内容,当我在模拟器或设备上运行时,没有记录任何内容。有什么想法吗?

2 个答案:

答案 0 :(得分:7)

嗯,你在谈论Application Delegate。显而易见的原因 - 您的对象未设置为应用程序委托

查看Apple文档,有很多方法可以实现它:

  1. 在Interface Builder中删除应用程序委托绑定(窗口的.xib文件)
  2. 将main.h中的UIApplicationMain的第4个参数设置为nil以外的其他参数。
  3. 检查Interface Builder中的nib文件,看看是否已设置App Delegate。

    参考文档 Core Application Design

      

    应用程序委托是您提供的自定义对象   应用程序启动时间,通常是将其嵌入应用程序中   主nib文件。该对象的主要工作是初始化   应用程序并在屏幕上显示其窗口。 UIApplication对象   还会在特定应用程序级事件时通知此对象   发生,例如当应用程序需要被中断时(因为   传入消息)或移动到后台(因为用户   点击主页按钮。


      

    第四个参数标识应用程序委托的类。   应用程序委托负责管理高级别   系统与您的自定义代码之间的交互。指定nil   告诉UIKit应用程序委托对象位于   应用程序的主nib文件(构建应用程序的情况)   使用Xcode模板)。

答案 1 :(得分:1)

尝试删除构建/清除所有目标,删除构建/目录并从模拟器和/或设备中删除应用程序。然后再次运行它。

作为另一项检查,请尝试在applicationDidBecomeActive:中记录内容。无论是在初始启动还是从后台恢复,都将调用此方法。