Objective c 无法呈现IB可指定项的实例

Objective c 无法呈现IB可指定项的实例,objective-c,xcode,swift,interface-builder,ibdesignable,Objective C,Xcode,Swift,Interface Builder,Ibdesignable,我有一个Objective-C和Swift混合动态框架。混合框架与两个纯Objective-C动态框架相连 当我试图用IB Designable标记混合框架中的任何类,并在storyboard或nib中使用该类时,Xcode总是说它的实例无法呈现 出现了错误消息: IB Designables:未能呈现WZUITokenField的实例:dlopen(WZUIKit.framework,1):未加载库:/Library/Frameworks/WZFoundation.framework/WZFo

我有一个Objective-C和Swift混合动态框架。混合框架与两个纯Objective-C动态框架相连

当我试图用IB Designable标记混合框架中的任何类,并在storyboard或nib中使用该类时,Xcode总是说它的实例无法呈现

出现了错误消息:

IB Designables:未能呈现WZUITokenField的实例:dlopen(WZUIKit.framework,1):未加载库:/Library/Frameworks/WZFoundation.framework/WZFoundation 引用自:WZUIKit.framework 原因:找不到图像

IB可设计文件:未能更新自动布局状态:dlopen(WZUIKit.framework,1):未加载库:@rpath/WZFoundation.framework/WZFoundation 引用自:WZUIKit.framework 原因:找不到图像

框架WZUIKit是Objective-C和Swift混合框架,WZFoundation是纯Objective-C


另外,所有这些SUTF都可以在设备或模拟器上工作。

最后,我通过在目标的构建设置的运行路径搜索路径字段中添加
$(配置构建目录)
解决了这个问题

另外,您可能需要对Xcode执行一些额外的步骤

  • 清除项目的Xcode派生数据。它们位于
    ~/Library/Developer/Xcode/DerivedData
  • 按清除当前版本⌘⇧K
  • 构建您的项目
  • 在情节提要中,进入
    编辑器
    菜单并刷新所有视图;等待构建完成,错误应该消失

  • 如果您在构建Mac应用程序时遇到同样的问题,请归功于@Mojtaba

    ,将
    @loader\u path/./Frameworks
    添加到
    运行路径搜索路径中为我解决了这个问题。

    我在Xcode 6.4中遇到了同样的问题,将测试目标成员身份添加到情节提要中为我修复了这些错误

    另外,我的测试目标在测试目标的运行路径搜索路径中设置了
    @loader\u path/Frameworks
    ,而不是在原始目标中


    对我来说,关闭xcode并重新打开它是有效的。之后没有错误。
    谢谢。

    在我的例子中,我正在使用initWithFrame/initWithCoder方法创建视图:

    className = NSStringFromClass([self class]);
    self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
    
    但是看起来我不应该使用主包,而是类的包。因此,我将该代码替换为以下代码,它起到了作用:

    bundle = [NSBundle bundleForClass:[self class]];
    className = NSStringFromClass([self class]);
    self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];
    
    我想这可能会对某人有所帮助。

    很有趣

    首先,WeZZard的回答让我走上了正确的方向,但这并不完全是我的解决方案

    在我的iOS项目中,有东西覆盖了目标中的
    运行路径搜索路径
    字段。看起来是这样的:

    LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
    
    我尝试了他添加
    $(CONFIGURATION\u BUILD\u DIR)
    的解决方案,但对我无效。由于它不起作用,出于习惯,我只是删除了配置条目(返回到项目默认值)。当我这样做时,它重置为:

    LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
    
    如果我深入研究我的xcconfig文件,它似乎来自cocoapod


    与Alex一样,
    @loader\u路径
    是关键,但它在iOS上的路径与Mac OS X略有不同。

    我刚刚找到了另一个原因:

    当我使用“编辑器->调试选定视图”时,我看到它崩溃了,因为我使用CoreGraphics创建了一个图像,并将其用作按钮的背景图像:

    class func imageWithColor(color: UIColor, size: CGSize) -> UIImage {
    
        let rect = CGRectMake(0.0, 0.0, size.width, size.height);
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
        let context = UIGraphicsGetCurrentContext();    // It's alraedy nil here :(
    
        CGContextSetFillColorWithColor(context, color.CGColor);
        CGContextFillRect(context, rect);
    
        let image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return image;
    
    }
    
    原因很简单,大小是(0.0,0.0)。为什么呢?我打电话来

    super.setBackgroundImage(UIImage.imageWithColor(bgColor, size: self.bounds.size), forState: .Normal)
    
    但在IB中,self.bounds.size此时仍然为0!所以我换了一行:

    let rect = CGRectMake(0.0, 0.0, max(size.width, 1.0), max(size.height, 1.0));
    
    现在它起作用了:)


    苹果应该提供一份关于IB的注意事项列表。

    我在一个OSX项目中遇到了这个问题

    在我的例子中,问题是一个旧项目(),其中包含一个具有错误构建设置的框架目标。具体而言:

    • 安装路径
      设置为
      @executable\u PATH/./Frameworks
      ,但正确的设置为
      /Library/Frameworks
    • 未设置
      跳过安装
      ,默认为
      ,但正确的设置为
    • 未设置DYLIB\u INSTALL\u NAME\u BASE
    ,但正确的设置为
    @rpath
    请注意,所有正确的设置都是为新创建的框架目标自动获得的设置


    将设置更改为正确的值后,Xcode能够在情节提要中加载我的
    @IBDesignable
    视图。

    我在Mac项目和Xcode 7.3.1上也经历过这种情况。在我的例子中,失败呈现错误消息中引用的框架与绘图完全无关

    只需转到目标的“常规/链接框架和库”选项卡,并将有问题的框架的状态从“必需”更改为“可选”,即可使IBDesignable在IB中正确更新和绘制


    按照以下步骤操作:

  • 如果故事板中存在任何冲突,请正确解决它们,检查xml是否正确验证。(这是主要步骤。)
  • 清理项目
  • 删除派生数据文件夹
  • 退出Xcode并重新启动它。(我不得不这样做两次。)

  • 我在一个包含IBDesignable的框架上遇到了这个错误

    我必须将
    $(框架搜索路径)
    添加到框架目标的
    LD\u运行路径搜索路径
    设置中

    在更新运行路径设置、构建和刷新故事板中的视图后,错误消失了。甚至不需要清理构建文件夹


    我有一个类似的错误,这是由于我的框架视图没有公共初始值设定项造成的:

    public override init(frame: CGRect) {
        super.init(frame:frame)
        commonInit()
    }
    
    required public init(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }
    
    清除派生数据。 退出Xcode,
    重新打开。

    在我的情况下,它位于私人舱内。Xcode版本10.3(10G8)

    在我的例子中,解决方案非常简单-我只是忘记在
    @IBInspectable var

    右变体:

    imp
    
    error: IB Designables: 
    
    Failed to render and update auto layout status for 
    
    UITableViewController (kDz-VB-YcS): 
    
    dlopen(YOUR_FRAMEWORK.framework, 1): 
    
    Library not loaded: @rpath/YOUR_FRAMEWORK.framework/YOUR_FRAMWORKReferenced
    
    from: YOUR_FRAMEWORK.frameworkReason: image not found
    
    
    post_install do |installer|
      installer.pods_project.build_configurations.each do |config|
        next unless config.name == 'Debug'
        config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = [
          '$(FRAMEWORK_SEARCH_PATHS)'
        ]
      end
    end