当我在故事板或其他笔尖中包含我的自定义IBDesignable视图时,代理会崩溃并抛出异常,因为它无法加载笔尖。
错误:IB Designables:无法更新自动布局状态:代理引发了一个" NSInternalInconsistencyException"例外:无法在捆绑中加载NIB:' NSBundle(已加载)'名字' StripyView'
这是我用来加载笔尖的代码:
override init(frame: CGRect) {
super.init(frame: frame)
loadContentViewFromNib()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
loadContentViewFromNib()
}
func loadContentViewFromNib() {
let nib = UINib(nibName: String(StripyView), bundle: nil)
let views = nib.instantiateWithOwner(self, options: nil)
if let view = views.last as? UIView {
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
}
}
当我在模拟器中运行时,视图会正确加载nib,为什么它不会在Interface Builder中显示?
答案 0 :(得分:34)
当Interface Builder呈现您的IBDesignable
视图时,它会使用帮助应用程序来加载所有内容。这样做的结果是mainBundle
在设计时与帮助应用程序相关,而不是您应用的mainBundle
。您可以看到错误中提到的路径与您的应用程序无关:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays
加载笔尖时,您依赖于在运行时将bundle: nil
默认传递到您应用的mainBundle
这一事实。
let nib = UINib(nibName: String(describing: StripyView.self), bundle: nil)
所以相反,你需要在这里传递正确的包。使用以下内容修复上述行:
let bundle = Bundle(for: StripyView.self)
let nib = UINib(nibName: String(describing: StripyView.self), bundle: bundle)
这将使Interface Builder从与自定义视图类相同的包中加载您的nib。
这适用于您的自定义视图从捆绑中加载的任何内容。例如,本地化的字符串,图像等。如果您在视图中使用这些,请确保使用相同的方法并明确传入自定义视图类的包。
答案 1 :(得分:3)
Sub Test()
Dim fRng As Range ' the cell that has the formula
Set fRng = Worksheets("sheet1").Range("A1")
Dim tWS As Worksheet 'the worksheet that has the values you want to get
Set tWS = Worksheets("sheet2")
Dim r As Range
For Each r In Range(fRng.Formula).Rows
'Debug.Print r.Row ' this is the rows numbers
Debug.Print tWS.Cells(r.Row, "N").Value 'N is the column name
Next
End Sub