2014-08-28 104 views
1

我有一個基本的可可應用程序,其窗口中只有一個WebViewWebKit.framework參考被添加到OS X上的Xcode 6 beta 6項目10.9(Mavericks)。我想知道WebView何時完成加載頁面。所以我創建了一個WebViewControllerDelegate類繼承WebFrameLoadDelegate。那已經是問題開始的地方了:Xcode告訴我關於Use of undeclared type 'WebFrameLoadDelegate'。關於this question on Stack Overflow,它不應該。就像已經提到的那樣,項目引用了WebKit.framework,在Swift類文件中導入了WebKit模塊。我還在012碼之前的左側欄中的「頭文件」文件夾中看到WebFrameLoadDelegate.h,位於WebKit.framework的下面。爲什麼WebFrameLoadDelegate被視爲未聲明?

萬惡之源是行11在文件TestWebView/WebViewControllerDelegate.swift(我忘了刪除我在這裏省略的註釋),類聲明和協議參考。

import WebKit 

class WebViewControllerDelegate: WebFrameLoadDelegate { 
    func didFinishLoadForFrame() { 
     NSLog("didFinishLoadForFrame()") 
    } 
} 

AppDelegate,其中完成所有設置:

import Cocoa 
import WebKit 

class AppDelegate: NSObject, NSApplicationDelegate { 
    @IBOutlet weak var window: NSWindow! 
    @IBOutlet weak var webView: WebView! 
    @IBOutlet weak var webViewControllerDelegate: WebViewControllerDelegate! 

    func applicationDidFinishLaunching(aNotification: NSNotification?) { 
     self.webView.frameLoadDelegate = self.webViewControllerDelegate 
     self.webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: "https://stackoverflow.com/"))) 
    } 

    func applicationWillTerminate(aNotification: NSNotification?) {} 
} 

欲瞭解更多信息,請看一看代碼在我my public repository,我對這個問題的產生。

回答

3

WebFrameLoadDelegate是一個非正式的協議,所以你不能聲明它符合它。只需從NSObject繼承並實現所需的方法。

此外,請注意Swift方法名稱是webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!),而不僅僅是didFinishLoadForFrame()

class WebViewControllerDelegate: NSObject { // WebFrameLoadDelegate 
     override func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!) { 
     NSLog("didFinishLoadForFrame()") 
    } 
} 
+0

我更新了我的存儲庫中的代碼,相應地爲其他具有相同或類似問題的代碼查看工作示例。 – 2014-08-29 06:45:44

相關問題