Failed to render instance of ClassName: The agent threw an exception loading nib in bundle

两盒软妹~` 提交于 2019-11-30 08:20:35

When Interface Builder renders your IBDesignable views, it uses a helper app to load everything. The upshot of this is that the mainBundle at design time is related to the helper app, and it's not your app's mainBundle. You can see that the path mentioned in the error has nothing to do with your app:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays

When loading the nib, you're relying on the fact that passing bundle: nil defaults to your app's mainBundle at run time.

let nib = UINib(nibName: String(describing: StripyView.self), bundle: nil)

So instead, you need to pass the correct bundle here. Fix the above line with the following:

let bundle = Bundle(for: StripyView.self)
let nib = UINib(nibName: String(describing: StripyView.self), bundle: bundle)

That will make Interface Builder load your nib from the same bundle as your custom view class.

This applies to anything that's loaded from a bundle by your custom view. For example, localised strings, images, etc. If you're using these in your view, make sure you use the same approach and explicitly pass in the bundle for the custom view class.

The same viewpoint with "Josh Heald", We can't pass nil for bundle. And this one for who in object - C:

- (UIView *) loadViewFromNib{
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:bundle];
UIView *v = [[nib instantiateWithOwner:self options:nil]objectAtIndex:0];
return v;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!