大佬教程收集整理的这篇文章主要介绍了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中还没有存在.如何在运行时检查?
-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,请注明来意。