【发布时间】:2025-11-28 14:45:01
【问题描述】:
我提出了一个试图重用某些功能的旧项目。
我创建了一个带有 UIView 子类的笔尖。在最初的工作版本中,我不需要在 IB 中设置 File's owner。但是,我收到的错误暗示我现在需要这样做(Xcode 7):loaded the "TipView" nib but the view outlet was not set.
所以我开始将File's owner 连接到负责设置视图的视图控制器。这是视图控制器中的相关代码:
class TipViewController: UIViewController {
private let kTipViewHeight: CGFloat = 400
private let kTipViewWidth: CGFloat = 300
override func viewDidLoad() {
super.viewDidLoad()
if let tipView = createTipView() {
let center = CGPoint(x: CGRectGetWidth(view.bounds)/2, y: CGRectGetHeight(view.bounds)/2)
tipView.center = center
view.addSubview(tipView)
}
}
func createTipView() -> UIView? {
if let view = UINib(nibName: "TipView", bundle: nil).instantiateWithOwner(nil, options: nil).first as? TipView {
view.frame = CGRect(x: 0, y: 0, width: kTipViewWidth, height: kTipViewHeight)
return view
}
return nil
}
}
extension UIViewController {
func presentTips(tips: [Tip], animated: Bool, completion: (() -> Void)?) {
let controller = TipViewController()
controller.modalTransitionStyle = .CrossDissolve
presentViewController(controller, animated: animated, completion: completion)
}
}
我尝试将instantiateWithOwner 设置为:.instantiateWithOwner(self, options: nil).first(将nil 更改为self)也无济于事。
这是相关的呈现视图控制器代码:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
presentTips([], animated: true, completion: nil)
}
UIView 子类没有做任何不寻常的事情,所以我没有费心包含它的代码。
当我进行请求的更改时 - 添加 TipViewController 作为 nib 的文件所有者并将其view 插座连接到 nib 视图 - 我收到一系列错误消息,具体取决于我采用的配置范围:
this class is not key value coding-compliant for the key view.
Can't add self as subview
不知道为什么我能够在 Xcode 6 中使用没有文件所有者的笔尖,但在 Xcode 7 中我无法这样做 - 没有找到与更改相关的任何材料或发行说明,所以我我现在有点难过。
非常感谢任何帮助。
【问题讨论】:
标签: ios xcode swift xcode7 nib