我创建了一个新的基于窗口的项目,无法弄清为什么它什么也没做。最终,我在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文档,有很多方法可以实现它:

  • 删除Interface Builder中的应用程序委托绑定(窗口的.xib文件)
  • 将main.h中UIApplicationMain的第4个参数设置为nil以外的值。

  • 在Interface Builder中检查您的nib文件,然后查看是否已安装“应用程序委托”。

    参考文件
    Core Application Design

    应用程序委托是您在以下位置提供的自定义对象
    应用启动时间,通常是将其嵌入到应用的
    主笔尖文件。该对象的主要工作是初始化
    应用程序并在屏幕上显示其窗口。 UIApplication对象
    在特定的应用程序级事件时也会通知此对象
    发生,例如当应用程序需要中断时(因为
    或进入背景(由于用户
    点击“主页”按钮)。



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

    关于iphone - didFinishLaunching永远不会被调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6963130/

    10-09 03:35