Dea*_*ean 18 xcode ios ios7 swift ios8
我们正在iOS 8 SDK上使用Xcode 6 beta 5 + Swift创建一个应用程序.我们也想部署到iOS 7.那可能吗?当我们将项目的部署目标设置为7.0时,我们得到如下编译时错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_WKPreferences", referenced from:
__TMaCSo13WKPreferences in WebViewController.o
"_OBJC_CLASS_$_WKWebView", referenced from:
__TMaCSo9WKWebView in WebViewController.o
"_OBJC_CLASS_$_WKWebViewConfiguration", referenced from:
__TMaCSo22WKWebViewConfiguration in WebViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
我相信这是因为我们正在使用WKWebKit,仅由iOS 8+支持.我们可以使用UIWebKitiOS 7但WKWebKit适用于iOS 8.我们如何定义它?
我们的类定义看起来像这样......
import WebKit
class WebViewController: UIViewController, WKNavigationDelegate {
...
}
Run Code Online (Sandbox Code Playgroud)
它被称为:
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let destinationVC = mainStoryboard.instantiateViewControllerWithIdentifier("WebViewController") as WebViewController
presentViewController(destinationVC, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用这个片段来调用,presentViewController但这并不能解决编译时问题.(NSFoundationVersionNumber也解决编译时问题)
if ((UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0) {
} else {
}
Run Code Online (Sandbox Code Playgroud)
更新:kkoltzau有正确的答案.我正在为其他人添加更多信息.
首先,转到您的Project,点击General,向下滚动Linked Frameworks and Libraries,然后添加WebKit.framework为可选.(我也做了UIKit.framework)看截图:

至于我的WebViewController班级.它仍然进口UIKit和WebKit.但是viewDidLoad()基于kkoltzau的例子来设置视图.然后,每当我需要加载/重新加载网页时,它都会检查是否存在wkWebView.
kev*_*vin 18
您将需要检查WKWebView是否可用,如果不是,则返回UIWebView.
确保你弱链接WebKit.framework(设置为可选)
Objective-C的:
WKWebView *wkWebView = nil;
UIWebView *uiWebView = nil;
Class wkWebViewClass = NSClassFromString(@"WKWebView");
if(wkWebViewClass) {
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
// ...
wkWebView = [[wkWebViewClass alloc] initWithFrame:frame configuration:config];
[self.view addSubview:wkWebView];
}
else {
uiWebView = [[UIWebView alloc] initWithFrame:frame];
[self.view addSubview:uiWebView];
}
Run Code Online (Sandbox Code Playgroud)
迅速:
var wkWebView : WKWebView?
var uiWebView : UIWebView?
if NSClassFromString("WKWebView") {
let config = WKWebViewConfiguration()
// ...
wkWebView = WKWebView(frame: frame, configuration: config)
self.view.addSubview(wkWebView)
}
else {
uiWebView = UIWebView(frame: frame)
self.view.addSubview(uiWebView)
}
Run Code Online (Sandbox Code Playgroud)
然后代码中的其他地方:
Objective-C的:
if(wkWebView) {
// WKWebView specific code
}
else {
// UIWebView specific code
}
Run Code Online (Sandbox Code Playgroud)
迅速:
if let w=wkWebView {
// WKWebView specific code
}
else if let w=uiWebView {
// UIWebView specific code
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13777 次 |
| 最近记录: |