2016-04-06 19 views
0

は、私には、JavaScriptのタッチでルビーに焦点を当てた多くの年後にスウィフト2とXcode 7.私はスウィフトを使い始めるよXCodeで「認識できないセレクタ」エラーが表示されるのはなぜですか?

を使ってMacのアプリを開発しています。

作成しているMacアプリには、ウェブブラウザのビューが含まれています。

ViewController.swiftは言う:

import Cocoa 
import WebKit 

class ViewController: NSViewController { 

    @IBOutlet var url: NSTextField! 
    @IBOutlet var browser: WKWebView! 

    @IBAction func go(sender: AnyObject) { 

     // browser.loadRequest(NSURLRequest(URL:NSURL(string: url.stringValue)!)) 
     // above line broken down for debugging 

     let url1 = url.stringValue 
     print("url1 = \(url1)") 

     let url2 = NSURL(string: url1)! 
     print("url2 = \(url2)") 

     let url3 = NSURLRequest(URL:url2) 
     print("url3 = \(url3)") 

     print("browser is \(browser)") 

     browser.loadRequest(url3) 

    } 
} 

アプリが正常にビルドされます。私はそれを実行すると、URLフィールドにhttp://apple.comを入力し、[Go]ボタンをクリックして、私は次を参照してください。

url1 = http://apple.com 
url2 = http://apple.com 
url3 = <NSURLRequest: 0x600000001400> { URL: http://apple.com } 
browser is <WebView: 0x608000120e60> 
2016-04-06 13:39:51.664 Testivate[6516:427535] -[WebView loadRequest:]: unrecognized selector sent to instance 0x608000120e60 
2016-04-06 13:39:51.664 Testivate[6516:427535] -[WebView loadRequest:]: unrecognized selector sent to instance 0x608000120e60 
2016-04-06 13:39:51.667 Testivate[6516:427535] (
    0 CoreFoundation      0x00007fff93f4a4f2 __exceptionPreprocess + 178 
    1 libobjc.A.dylib      0x00007fff8ca7a73c objc_exception_throw + 48 
    2 CoreFoundation      0x00007fff93fb41ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
    3 CoreFoundation      0x00007fff93eba571 ___forwarding___ + 1009 
    4 CoreFoundation      0x00007fff93eba0f8 _CF_forwarding_prep_0 + 120 
    5 Testivate       0x000000010000271a _TFC9Testivate14ViewController2gofPs9AnyObject_T_ + 2154 
    6 Testivate       0x00000001000027b6 _TToFC9Testivate14ViewController2gofPs9AnyObject_T_ + 54 
    7 libsystem_trace.dylib    0x00007fff96e1807a _os_activity_initiate + 75 
    8 AppKit        0x00007fff94567e89 -[NSApplication sendAction:to:from:] + 460 
    9 AppKit        0x00007fff94579fde -[NSControl sendAction:to:] + 86 
    10 AppKit        0x00007fff94579f08 __26-[NSCell _sendActionFrom:]_block_invoke + 131 
    11 libsystem_trace.dylib    0x00007fff96e1807a _os_activity_initiate + 75 
    12 AppKit        0x00007fff94579e65 -[NSCell _sendActionFrom:] + 144 
    13 libsystem_trace.dylib    0x00007fff96e1807a _os_activity_initiate + 75 
    14 AppKit        0x00007fff9457848a -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2693 
    15 AppKit        0x00007fff945c0fd0 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 744 
    16 AppKit        0x00007fff94576bb4 -[NSControl mouseDown:] + 669 
    17 AppKit        0x00007fff94acb469 -[NSWindow _handleMouseDownEvent:isDelayedEvent:] + 6322 
    18 AppKit        0x00007fff94acc44d -[NSWindow _reallySendEvent:isDelayedEvent:] + 212 
    19 AppKit        0x00007fff9450b63d -[NSWindow sendEvent:] + 517 
    20 AppKit        0x00007fff9448bb3c -[NSApplication sendEvent:] + 2540 
    21 AppKit        0x00007fff942f2ef6 -[NSApplication run] + 796 
    22 AppKit        0x00007fff942bc46c NSApplicationMain + 1176 
    23 Testivate       0x0000000100004f34 main + 84 
    24 libdyld.dylib      0x00007fff9099a5ad start + 1 
    25 ???         0x0000000000000003 0x0 + 3 
) 

は当初、私はエラーがloadRequestbrowserため認識されていないセレクタだったが、あなたは私がしました見ることができると言ったと思いました機能を引き離し、browserは明らかにWebViewのインスタンスであり、definitely has loadRequest as a methodです。どのようにして私が別の方法を引っ張ってきたのか、私は確かにloadRequestメソッドに期待されるNSURLRequest objectを提供していることがわかります。

これはおそらく、これはWebViewをMain.storyboardに見つけることができないことと関連があると考えていますが、確かにできるはずですか?私はこのようにそれに接続を定義しました:

Screenshot of Connections Inspector

あなたがソースとしてMain.storyboard表示、それは言う:

<webView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Ocj-mD-woP"> 
    <rect key="frame" x="62" y="20" width="406" height="211"/> 
    <webPreferences key="preferences" defaultFontSize="12" defaultFixedFontSize="12"> 
     <nil key="identifier"/> 
    </webPreferences> 
</webView> 

任意の考え?ありがとう。

+0

'browser'が実際にその呼び出しで' nil'であることを確認してデバッグしましたか? – tktsubota

+0

これまでのところTroyT。これを行う方法についてもっと知ることは素晴らしいことです。 –

+0

気にしないで、 'browser'を印刷するときにあなたのコードに表示されます。 – tktsubota

答えて

2

あなたは2種類のWebビューを混在させています。

コードでは、browserWKWebViewであるとしています。それは、OS X 10.10で初めて利用可能だった、より新しい種類のWebビューです。 Objective-Cでは-loadView:、またはSwiftではloadView()というメソッドがあります。あなたは、コードを実行するときには、あなたのストーリーボードに入れて何だから

@IBOutlet var browser: WKWebView! 

ただし、オブジェクトは、実際にWebViewです。これは古いタイプのウェブビューです。それは-loadView:という名前のメソッドを持たないので、呼び出すときにエラーが発生します。

browser is <WebView: 0x608000120e60> 
-[WebView loadRequest:]: unrecognized selector sent to instance 0x608000120e60 

(。。あなたが再びWebViewメインフレーム-loadRequest:を実装していますが、WebViewないにリンクされているドキュメントを読んで)

ここでは、2つの可能な修正は以下のとおりです。

簡単:WebViewを正しく使用するようにコードを修正しますが、ストーリーボードは同じままにしておきます。

@IBOutlet var browser: WebView! 
... 
browser.mainFrame.loadRequest(url3) 

ハーダー:WKWebViewを使用してコードを保つが、あなたのストーリーボードからWebViewを削除します。

残念ながらit's currently impossible to put a WKWebView in a storyboardなので、自分で設定するにはコードを書く必要があります。それを行う方法の例については、リンクされた回答を参照してください。

WKWebViewの新機能を利用するには、2番目の方法を使用する必要があります。

+0

thx!それを固定した –

関連する問題