Interface Builder - 无法从路径加载可设计项(null)

时间:2015-02-08 06:04:42

标签: ios interface-builder xcode6 custom-controls ibdesignable

我有一些我创建的自定义控件,我在新项目中使用它们。但是,我一直在界面构建器中遇到错误:

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)

我已经测试了另一个项目中的控件,它们似乎在界面构建器中正确呈现,但我无法让它们在当前项目中工作。导致此错误的原因以及如何解决?

提前致谢...

16 个答案:

答案 0 :(得分:62)

我有同样的问题。我使用cocoapods,有一个使用可设计的pod。所以诀窍是添加&#39; use_frameworks!&#39;到Podfile。做一个“pod update”&#39;重新打开xcode项目,错误消息不应该显示。

答案 1 :(得分:11)

编辑**

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

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

答案 2 :(得分:4)

我正在运行Xcode 7.3,并且通过遵循以下步骤使错误神奇地消失,最终使我的项目保持在遵循这些步骤之前的确切状态(即对任何事物的净零更改) ):

  1. 添加'use_frameworks!' (当然没有撇号)给你的 podfile
  2. 打开终端窗口
  3. cd到您项目的根目录
  4. 从命令行运行'pod install'
  5. 删除'use_frameworks!'来自你的podfile
  6. 再次运行'pod install'
  7. 再次尝试构建并查看是否可以修复 错误;它为我做了
  8. 看起来像我们以前见过的那些偶然的Xcode障碍之一,特别是当你急于完成别的事情时。

答案 3 :(得分:2)

此问题已在最新版本的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

答案 4 :(得分:2)

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

  1. 退出Xcode。
  2. 终止您计算机上名为Interface Builder Cocoa Touch Tool的所有进程。
  3. 再次启动Xcode。

答案 5 :(得分:1)

我不确定这是否能解决您的问题,因为我无法重现它。但我认为你可能会尝试一下。

首先,正如其他人提到的,似乎CocoaPods有同样的问题。我完成了修正的提交,但没有与你的设置相关的结果。

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

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

答案 6 :(得分:1)

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

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

的积分

答案 7 :(得分:1)

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

  1. 产品菜单&gt;清洁
  2. 按住选项&gt;产品菜单&gt;清洁构建文件夹...&gt;清洁
  3. 窗口菜单&gt;项目&gt;选择我的框架项目&gt;删除派生数据
  4. 窗口菜单&gt;项目&gt;选择我的主项目&gt;删除派生数据
  5. 退出Xcode
  6. 重启Xcode
  7. 对任何和所有具有IBDesignables且可能导致错误的框架项目重复步骤3.

答案 8 :(得分:1)

我通过更新pod&#34; pod update&#34;解决了这个问题。希望它对你有用

答案 9 :(得分:1)

问题是,当界面构建器呈现您的视图时,来自cocoapods的IB_DESIGNABLE未正确链接。

use_frameworks!技巧应该这样做,但对我来说,迁移代码只需要太多的努力。

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

答案 10 :(得分:0)

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

  

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

错误没有再出现。

答案 11 :(得分:0)

我没有使用可可豆荚但是在扩展导入类的视图控制器上出现此错误。我只是在将StoryBoard更改为IphoneX视图时遇到此错误,它在iPhone 8视图上工作正常。

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

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

答案 12 :(得分:0)

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

样品

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

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

答案 13 :(得分:0)

对我来说,所有与Pods相关的修补程序都不起作用,但是删除了Derived Data文件夹。 Xcode 11

答案 14 :(得分:0)

如果您已经厌倦了尝试找出解决方案,或者如果是星期五下午,请放松并删除派生数据文件夹,清理构建Xcode,关闭Mac,休息5分钟(如果在截止日期前不要消防:P)。打开Mac启动Xcode,然后尝试再次构建。

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

答案 15 :(得分:-1)

清洁+重新启动XCode对我而言。如果问题是由您创建IBDesignable视图然后删除可检查或可设计标签引起的,那么我绝对会尝试这种方法