Objective c 无法呈现IB可指定项的实例
我有一个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-CObjective 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
另外,所有这些SUTF都可以在设备或模拟器上工作。最后,我通过在目标的构建设置的运行路径搜索路径字段中添加
$(配置构建目录)
解决了这个问题
另外,您可能需要对Xcode执行一些额外的步骤
~/Library/Developer/Xcode/DerivedData
编辑器
菜单并刷新所有视图;等待构建完成,错误应该消失如果您在构建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中正确更新和绘制
按照以下步骤操作:
我在一个包含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