gpt4 book ai didi

iPhone 在通用应用程序中检查运行时的常量

转载 作者:行者123 更新时间:2023-12-03 18:59:01 24 4
gpt4 key购买 nike

我正在制作一个通用的 iPad/iPhone 应用程序,它可以使用 iPad 的 VGA 输出连接器将应用程序的内容镜像到外部屏幕上。不过iPhone不具备这个功能。给出以下代码,

#ifdef UI_USER_INTERFACE_IDIOM  
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
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 中还不存在。我如何在运行时检查这一点?

更新添加了 ifdef 语句来检查 ipad 接口(interface),但得到相同的结果!

更新添加了 NSLog 语句以确保 if 语句内的代码未被调用。崩溃似乎发生在执行任何其他代码之前...

最佳答案

尝试弱链接 UIKit。添加到您的其他链接标志中:

-all_load -ObjC -weak_framework UIKit

如果您的目标是 3.1 之前的设备,但引用仅存在于 3.2 中的类,则无法通过符号引用它们,必须使用 NSClassFromString。但有些情况下这是不可能的,例如如果您对这样一个类进行子类化(例如 UIPopoverController)。在这些情况下,你必须弱链接 UIKit。当您弱链接框架时,动态加载器会尝试在启动时解析所有符号,如果失败,则将其设置为 NULL。

我猜测常量 UIScreenDidConnectNotification 未标记(错误),因此您需要使用相同的解决方法。

弱链接有一个缺点。由于它必须在启动时动态地执行此操作,因此启动时间会受到影响。您必须测试它是否对您来说太慢。

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

顺便说一句,使用 #ifdef 进行检查不起作用,因为 #ifdef 是编译时构造,因此 UI_USER_INTERFACE_IDIOM 将始终被定义,因为您正在使用 3.2 SDK 进行构建

关于iPhone 在通用应用程序中检查运行时的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2726670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com