iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iPhone在通用应用程序中检查运行时的常量大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在制作一个通用的iPad / iPhone应用程序,可以使用iPad的VGA输出连接器在外部屏幕上镜像应用程序的内容.但是,iPhone没有此功能.给出以下代码,

#ifdef UI_user_iNTERFACE_I@L_901_5@m  
    if (UI_user_iNTERFACE_I@L_901_5@m() == UIUserInterfaceI@L_901_5@mPad) {
    NSLog(@"this code should not execute on iphone");
[[NsnotificationCenter defaultCenter] addObserver:self
         SELEctor:@SELEctor(screenInfoNotificationReceieved:) 
          name:UIScreenDidConnectNotification
           object:nil];
[[NsnotificationCenter defaultCenter] addObserver:self
         SELEctor:@SELEctor(screenInfoNotificationReceieved:) 
          name:UIScreenDidDisconnectNotification
           object:nil];
}
#endif

我在发布时在手机上出现此错误(在ipad中正常工作)
“dyld:未找到符号:_UIScreenDidConnectNotification”

大概是因为UIScreenDidConnectNotification在3.13中还没有存在.如何在运行时检查?

updatED添加了ifdef语句来检查ipad接口,但获得了相同的结果!

updatED添加了NSLog语句,以确保不调用if语句中的代码.崩溃似乎发生在任何其他代码执行之前…

解决方法

尝试弱@L_696_15@UIKit.添加到您的其他@L_696_15@标志:

-all_load -ObjC -weak_framework UIKit

如果你定位3.1之前的设备,但是引用一个只存在于3.2中的类,你不能用符号引用它们,你必须使用NSClassFromString.但是有些情况下是不可能的,例如如果你继承了这样一个类(比如说UIPopoverController).在这些情况下,你必须弱化UIKit.当您对框架进行弱@L_696_15@时,动态加载程序会尝试在启动时解析所有符号,如果失败则将其设置为NULl.

我猜测常量UIScreenDidConnectNotification没有标记(bug),所以你需要使用相同的解决方法.

弱连接有一个缺点.由于必须在启动时动态执行此操作,因此启动时间会受到影响.你必须测试它是否太慢了.

弱@L_696_15@框架的另一种方法是:在目标上执行“获取信息”,在“常规”选项卡下,您将看到框架列表.将uIKit的类型更改为Weak.

便说一下,使用#ifdef检查不起作用,因为#ifdef是编译时结构,所以总是会定义UI_user_iNTERFACE_I@L_901_5@m,因为你正在使用3.2 SDK构建

大佬总结

以上是大佬教程为你收集整理的iPhone在通用应用程序中检查运行时的常量全部内容,希望文章能够帮你解决iPhone在通用应用程序中检查运行时的常量所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。