【发布时间】:2016-01-28 10:31:40
【问题描述】:
目前正在将 obj-c 框架转换为 swift。 在我的委托中,我有一个带有 iboutlet 到 webview 的类(我将其定义为强),但是当我尝试使用(第一个块来自 PhWebViewController)设置 url 时:
var parent : PhFacebook?
override func awakeFromNib() {
let bundle = NSBundle(forClass: PhFacebook.self)
self.window.title = bundle.localizedStringForKey("FBAuthWindowTitle", value: "", table: nil)
self.cancelButton.title = bundle.localizedStringForKey("FBAuthWindowCancel", value: "", table: nil)
self.window.delegate = self
self.window.level = Int(CGWindowLevelForKey(.FloatingWindowLevelKey))
}
var webViewController : PhWebViewController?
self.webViewController = PhWebViewController()
self.webViewController!.parent = self
self.webViewController!.webView .mainFrameURL = authURL
我的 osx 应用程序崩溃了,xcode 告诉我它在打开一个选项时发现 nil。 我和他有同样的问题: Swift, error EXC_BREAKPOINT (code=1, subcode=0x100695474)
除了对我来说 iboutlet 与 strong 属性有关。 我做了一些检查,webViewController 属性不是 nil,但 webView 是。 我认为 xib 文件可能已损坏,所以我创建了另一个文件,再次制作了插座,但没有任何改变。
以前有人遇到过同样的问题吗?
【问题讨论】:
-
您将
PhWebViewController的新实例分配给webViewController。如果您引用PhWebViewController的IBOutlet,那么它将崩溃,因为出口为零(如错误所述)。那是因为视图还没有加载。 -
另外,您可能希望
webViewController成为weak以防止强引用循环。 -
所以我在 PhWebViewController 中的 awakefromnib 方法没有被调用。这很奇怪,因为我没有偏离原始框架,并且代码中也没有调用该方法并且它可以工作。
-
我没有使用
awakeFromNib()的经验,但我知道当您尝试访问.webView时视图尚未加载。如果webViewController用作委托方法,那么您应该在创建此视图时设置委托或者您可以尝试“找到”PhWebViewController的实例。