界面生成器 - 无法从路径加载设计对象(空)

Posted

技术标签:

【中文标题】界面生成器 - 无法从路径加载设计对象(空)【英文标题】:Interface Builder - Failed to load designables from path (null) 【发布时间】:2015-04-08 02:11:19 【问题描述】:

我创建了一些自定义控件,并在新项目中使用它们。但是,我在界面生成器中不断收到错误:

Failed to update auto layout status: Failed to load designables from path (null)

Failed to render instance of <control>: Failed to load designables from path (null)

我已经在另一个项目中测试了控件,它们似乎在界面生成器中正确呈现,但我无法让它们在当前项目中工作。是什么导致了这个错误,我该如何解决?

提前谢谢...

【问题讨论】:

@N1ghtshade3 我遇到了同样的问题,我遇到的问题不是来自 CocoaPods 依赖项。 我也没有使用 CocoaPods,但是我看过 CocoaPods 相关的帖子。我认为 CocoaPods 已经找到了解决这个问题的方法,但不幸的是我在任何地方都找不到! 您是否使用 imageNamed(:) 加载任何图像 看看github.com/CocoaPods/CocoaPods/issues/2792和***.com/questions/28204108/… 另一种解决方案:***.com/a/38368740/2245240 【参考方案1】:

我遇到了同样的问题。我使用 cocoapods,并且有一个使用 designables 的豆荚。所以诀窍是添加“use_frameworks!”到 Podfile。执行 'pod update' 重新打开 xcode 项目,错误消息不应该出现。

【讨论】:

这与 ios 7+ 无关,因为它破坏了许多像 Realm 这样的库。 我正在使用 iOS 8 和 iOS 9 进行测试,它适用于我。 这可以解决问题,但添加了“use_frameworks!”破坏了我下载的 pod 的一些导入语句。 !use_frameworks 将大大增加您的构建大小仅供参考 最近使用 Xcode 13.0 进行了测试,它也适用于我。它已删除 IBDesignables。【参考方案2】:

编辑**

打开 Xcode(但不要打开你的项目)并点击 Window(右起第二个)

点击管理器并确保您在项目中,然后删除所有派生数据。 关闭 Xcode,然后重新打开你的项目,让 Xcode 重新索引你的文件,看看是否能解决问题

【讨论】:

我已经尝试了所有这些,但当我将 IB_Designable 和 IBInspectable 添加回类时仍然有同样的错误 不起作用。已经尝试了多种变体。这不是派生数据问题。【参考方案3】:

我正在运行 Xcode 7.3,并通过执行这些步骤使错误神奇地消失,最终使我的项目处于执行这些步骤之前的确切状态(即对任何内容进行净零更改):

    添加“use_frameworks!” (当然没有撇号)给你的 豆荚文件 打开一个终端窗口 cd 到项目的根目录 从命令行运行“pod install” 删除“use_frameworks!”从你的 podfile 中 再次运行“pod install” 再次尝试构建,看看是否能修复 错误;它对我有用

看起来像是我们以前都见过的偶尔出现的 Xcode 障碍之一,尤其是当您急于完成其他事情时。

【讨论】:

完美运行!感谢您提供的超级清晰、详细的说明(其他人提到了 use_frameworks!,但没有人提到之后将其删除,并将其留在我的其他 pod 中导致问题)。【参考方案4】:

如果以前的解决方案不适合您,请尝试添加到您的目标 pod inherit! :search_paths

样本

  target 'my-app-target' do
    use_frameworks!
    inherit! :search_paths
  end

然后按照之前的建议进行 pod 更新。

【讨论】:

【参考方案5】:

我不确定这是否能解决您的问题,因为我无法重现它。但我想你还是可以试试看。

首先,正如其他人提到的,CocoaPods 似乎也有同样的问题。我浏览了弥补其更正的提交,但没有与您的设置相关的结果。

但是,我在这个*** question 中发现了一条不同的相关错误消息,这也与 IB 在路径上找不到的东西有关。我想知道他们的解决方案是否可以帮助您:

解决方案是在目标的Build settings Runpath Search Paths 字段中添加$(CONFIGURATION_BUILD_DIR)

【讨论】:

对这个问题的所有答案都投反对票的人能否提供理由? 他们的评级可能会下降。非常感谢您的回答!即使在 2020 年也有帮助:) 打桩。这对我有用(Xcode 12),最高评价的 use_frameworks! 答案将是我项目中的豆荚的痛苦世界【参考方案6】:

我在具有自定义 IBDesignable 视图的非 CocoaPods 项目上遇到了同样的问题。显然,这是一个 Xcode 错误。 this answer 中的步骤帮助我解决了问题。简而言之:

    退出 Xcode。 杀死您机器上所有名为Interface Builder Cocoa Touch Tool 的进程。 再次启动 Xcode。

【讨论】:

【参考方案7】:

我不使用 CocoaPods,但我确实使用了包含 IBDesignable 项目的内部框架,并且也遇到了这个问题。我清理了,从我的主项目中删除了派生数据,然后重新启动了 Xcode,但这似乎并没有解决它。要解决它,我必须转到 Window > Projects,选择框架项目(不是使用框架的项目,而是框架项目本身),然后删除派生数据。所以,完整的步骤:

    产品菜单 > 清洁 按住选项>产品菜单>清理构建文件夹...>清理 窗口菜单 > 项目 > 选择我的框架项目 > 删除派生数据 窗口菜单 > 项目 > 选择我的主项目 > 删除派生数据 退出 Xcode 重启 Xcode

对任何和所有具有 IBDesignables 并可能导致错误的框架项目重复第 3 步。

【讨论】:

【参考方案8】:

这个问题在最新版本的 Cocoapods 中修复了

要安装,只需运行:

[sudo] gem install cocoapods --pre

为了修复错误:“无法从路径(null)加载可指定项”:

use_frameworks!

   pod '****'



end

use_frameworks! 添加到您的 Podfile

了解更多:Live Rendering a custom component using IB_DESIGNABLE from a pod dependency

【讨论】:

【参考方案9】:

问题是当界面生成器呈现您的视图时,来自 cocoapods 的 IB_DESIGNABLE 没有正确链接。

use_frameworks! 技巧应该可以做到,但对我来说,迁移代码有点费力。

我的诀窍是子类化我在故事板中使用的每个 IB_DESIGNABLE 视图,这些视图直接来自 pod。解决了错误。

【讨论】:

【参考方案10】:

您可以使用一个非常方便的技巧来调试实时渲染。

1) 将此扩展添加到您的项目中:

    extension UIView 
    public func liveDebugLog(message: String) 
        #if !(TARGET_OS_IPHONE)
            let logPath = "/tmp/XcodeLiveRendering.log"
            if !NSFileManager.defaultManager().fileExistsAtPath(logPath) 
                NSFileManager.defaultManager().createFileAtPath(logPath, contents: NSData(), attributes: nil)
            

            var fileHandle = NSFileHandle(forWritingAtPath: logPath)
            fileHandle.seekToEndOfFile()

            let date = NSDate()
            let bundle = NSBundle(forClass: self.dynamicType)
            let application: AnyObject = bundle.objectForInfoDictionaryKey("CFBundleName")
            let data = "\(date) \(application) \(message)\n".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
            fileHandle.writeData(data)
        #endif
    
  

2) 添加liveDebugLog(message:) 并输入您想知道的任何内容。 3) 打开Terminal.app,运行命令open /tmp/XcodeLiveRendering.log

完成!

Morten Bøgh 的积分

【讨论】:

【参考方案11】:

我已经通过更新 pod “pod update”解决了这个问题,希望它对你有用

【讨论】:

【参考方案12】:

如果您已经厌倦了试图找出解决方案,或者如果是星期五下午,只需放松并删除派生数据文件夹,清理构建 Xcode,关闭您的 mac,休息 5 分钟(如果您在你的最后期限之前不要灭火:P)。打开你的 mac 启动 Xcode 再次尝试构建。

如果这行得通,只需诅咒 Xcode 并像我一样继续前进 :)

【讨论】:

【参考方案13】:

当我在 xcode 和我的项目打开时更新 pod 时出现此错误。

我关闭了 xcode。再次运行 pod 更新。重启xcode。

错误没有再次出现。

【讨论】:

【参考方案14】:

我没有使用可可豆荚,但在扩展导入类的视图控制器上出现此错误。我只是在将 StoryBoard 更改为 IphoneX 视图时才收到此错误,它在 iPhone 8 视图上运行良好。

我将项目设置从 New Build System (Preview) 更改为 Standard Build system,然后清理项目,错误消失了。

不知道为什么,但这为我解决了问题。

【讨论】:

【参考方案15】:

所有与Pods 相关的修复对我不起作用,但删除Derived Data 文件夹有效。 Xcode 11

【讨论】:

【参考方案16】:

如果对我来说,清理 + 重新启动 XCode。如果问题源于您创建 IBDesignable 视图然后删除可检查或可设计标签,我绝对会尝试这种方法

【讨论】:

以上是关于界面生成器 - 无法从路径加载设计对象(空)的主要内容,如果未能解决你的问题,请参考以下文章

使用界面生成器设计视图

无法将 PHP 生成的 JSON 解析为 .NET 对象。总是空的

无法使用 BitmapFactory.decodeFile 加载 JPEG 图像。返回空

从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象

将对象从界面生成器控制拖动到 swift 文件时,默认选择 Action Outlet

GraphQL 代码生成器 - 无法从 Nestjs 服务器端点加载我的 GQL 架构