首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当iOS目标为3.1.3时找不到UINib

当iOS目标为3.1.3时找不到UINib
EN

Stack Overflow用户
提问于 2010-10-13 06:13:31
回答 2查看 410关注 0票数 0

您好,我正在使用SDK4.1构建一个iPhone应用程序,并将目标操作系统设置为3.1.3。当我在运行iOS4.1的设备上安装应用程序时。一切都很顺利。当我尝试在运行3.1.3版本的设备上运行这个应用程序时,我得到了下面的堆栈跟踪。

代码语言:javascript
复制
dyld: Symbol not found: _OBJC_CLASS_$_UINib
  Referenced from: /var/mobile/Applications/BDD67A1E-9B40-43E7-A012-7D92036B2E24/ThisIsMy.app/ThisIsMy
Expected in: /System/Library/Frameworks/UIKit.framework/UIKit
 in /var/mobile/Applications/BDD67A1E-9B40-43E7-A012-7D92036B2E24/ThisIsMy.app/ThisIsMy

我猜测这是因为UINib是在4.0版本中才添加到SDK中的。

我想知道的是你如何缓解这个问题。我应该怎么做才能支持3.1.3?

干杯..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-13 06:28:27

首先,您需要将框架引用更改为weak link (aka "optional")。然后,在调用使用类的代码之前,使用here描述的技术测试类是否存在。

票数 -1
EN

Stack Overflow用户

发布于 2011-09-17 08:34:54

我强烈建议你而不是弱链接UIKit。这可能会隐藏未来的链接器问题并导致崩溃。我也不愿意告诉链接器UIKit是可选的,而实际上它不是。

相反,使用NSClassFromString间接初始化和调用UIPopoverController:

代码语言:javascript
复制
Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
    self.myPopover = [[popover alloc] initWithContentViewController:myContent];
}

如果您仍然有链接器错误,您可能需要使用NSSelectorFromString调用UIPopoverController的消息:

代码语言:javascript
复制
Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
    SEL myInit = NSSelectorFromString(@"initWithContentViewController:");
    self.myPopover = [[popover alloc] performSelector:myInit withObject:myContent];
}

为了便于移植,我建议编写一个代理对象来处理这些实现细节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3919480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档