Swift 2 ve Xcode 7'yi kullanarak bir Mac uygulaması geliştiriyorum.XCode neden 'tanınmayan bir seçici' hatası veriyor?
Swift ile bir kaç yıl çalıştıktan sonra Swift ile çalışmaya başladım.
Oluşturduğum Mac uygulaması bir web tarayıcısı görünümü içeriyor.
Benim ViewController.swift
diyor ki:
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)
}
}
uygulaması başarıyla oluşturur.
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
)
Başlangıçta hata loadRequest
browser
için tanınmayan bir seçici olduğunu söylüyordu, ama ben ettik görebilirsiniz: Bunu çalıştırdığınızda, URL alanına http://apple.com
girip Git butonuna tıklayın, görüyorum işlevi ayırdı ve browser
açıkça WebView
, definitely has loadRequest
as a method bir örneğidir. Beklenen NSURLRequest object
ile kesinlikle loadRequest
yöntemini sağladığım yöntemi nasıl ayırdığımı görebilirsiniz.
Şimdi bunun belki de bunun WebView'ı Main.storyboard
numaralı telefondan bulamaması ile ilgili bir şeyleri olduğunu düşünüyorum, ama kesinlikle bunu yapabilmeli midir? Böyle Üzerinde bağlantıları tanımladığınız:
kaynak olarak Main.storyboard
görüntülemek, diyor:
<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>
herhangi bir düşünce? Teşekkürler.
Eğer 'browser' Görüşmeyi bir' nil' aslında ise kontrol ederek hata ayıklama mı? – tktsubota
Çok uzak değil TroyT. Bunun nasıl yapılacağı hakkında daha fazla bilgi edinmek harika olurdu. Eğer 'browser' yazdırırken –
Aldırma, senin kodunda görebilirsiniz. – tktsubota