代码之家  ›  专栏  ›  技术社区  ›  nicktmro

iOS目标为3.1.3时未找到UINib

  •  0
  • nicktmro  · 技术社区  · 14 年前

    您好! 当我在运行iOS4.1的设备上安装应用程序时。一切顺利。 当我试图在运行3.1.3的设备上运行该应用程序时,我得到了下面的stacktrace。

    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中。

    干杯。。

    2 回复  |  直到 14 年前
        1
  •  -1
  •   Kris Markel    14 年前

    weak link (aka "optional") . 然后使用所描述的技术 here 在调用使用类的代码之前测试该类是否存在。

        2
  •  2
  •   AWrightIV    13 年前

    弱链接UIKit。这可能会隐藏将来的链接器问题并导致崩溃。我也不习惯告诉链接器UIKit是可选的,而事实上它不是。

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

    Class popover = NSClassFromString(@"UIPopoverController");
    if (nil != popover)
    {
        self.myPopover = [[popover alloc] initWithContentViewController:myContent];
    }
    

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

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