2016-02-13 4 views
0

Я новичок в Swift и пытаюсь использовать приложение UIWebView, которое загружает URL-адрес по умолчанию, с возможностью выполнения быстрого действия и загрузки другого URL-адреса.Swift 3D Touch Quick Action не загружает запрошенный url

Проблема в том, когда я запрашиваю URL-адрес быстрого действия, код выполняется, но новый URL-адрес не загружается. Поэтому я что-то пропускаю в потоке.

Вот код:

import UIKit 
import WebKit 

class ViewController: UIViewController, UIWebViewDelegate { 

    @IBOutlet var webView: UIWebView! 

    override func loadView() { 
     super.loadView() 
     self.webView = UIWebView() 
     self.view = self.webView! 
    } 

    override func viewDidLoad() { 
     print("view did load") 
     super.viewDidLoad() 
     let url = NSURL(string: "google.com") 
     let req = NSURLRequest(URL:url!) 
     webView.loadRequest(req) 
     webView.delegate = self 
    } 

    func loadUrl2() { 
     loadView() 
     let url = NSURL(string: "example.com") 
     print(url) 
     let req = NSURLRequest(URL:url!) 
     self.webView!.loadRequest(req) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

Я экспериментировал и добавил loadView к loadUrl2, как я получаю

fatal error: unexpectedly found nil while unwrapping an Optional value

до этого.

+0

На какой строке вы получаете эту «фатальную ошибку: неожиданно найденный nil при развертывании необязательного значения»? – Alex

+0

Я, должно быть, тоже изменил что-то другое, так как теперь я не могу его восстановить. Извините –

ответ

1

Edited Включить загрузку вторичного канала связи:

Вот изменения и файлы, которые вы должны будете внести в App Delegate

enum ShortcutIdentifier: String { 
     case OpenNewLink 
     case OpenBetterLink 

     init?(fullIdentifier: String) { 
      guard let shortIdentifier = fullIdentifier.componentsSeparatedByString(".").last else { 
       return nil 
     } 
     self.init(rawValue: shortIdentifier) 
    } 
} 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsAnnotationKey] as? UIApplicationShortcutItem { 
     handleShortcut(shortcutItem) 
     return false 
    } 
    return true 
} 

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) { 
    completionHandler(handleShortcut(shortcutItem)) 
} 

private func handleShortcut(shortcutItem: UIApplicationShortcutItem) -> Bool { 
    let shortcutType = shortcutItem.type 
    guard let ShortcutIdentifier = ShortcutIdentifier(fullIdentifier: shortcutType) else { 
     return false 
    } 
    return selectLinkForIdentifier(ShortcutIdentifier) 
} 

private func selectLinkForIdentifier(identifier: ShortcutIdentifier) -> Bool { 
    guard let mainView = self.window?.rootViewController as? ViewController else { 
     return false 
    } 

    switch identifier { 
    case .OpenNewLink: 
     mainView.urlString = "http://www.bing.com" 
     mainView.loadWebView(mainView.urlString) 
     return true 

    case.OpenBetterLink: 
     mainView.urlString = "http://www.duckduckgo.com" 
     mainView.loadWebView(mainView.urlString) 
     return true 
    } 
} 

Я также внес изменения в MainVC

class ViewController: UIViewController, UIWebViewDelegate { 

@IBOutlet var webView: UIWebView! 
var urlString: String? = nil 


override func viewDidLoad() { 
    super.viewDidLoad() 

    setUpWebView() 
    webView.delegate = self 
    view.addSubview(webView) 
} 


func setUpWebView() { 
    webView = UIWebView() 
    webView.frame = CGRectMake(0, 0, view.frame.width, view.frame.height) 
    loadWebView(urlString) 
} 

func loadWebView(var urlString: String?) { 
    if urlString == nil { 
     urlString = "http://www.google.com" 
    } 

    let url = NSURL(string: urlString!) 
    let req = NSURLRequest(URL:url!) 
    webView.loadRequest(req) 

} 

Обязательно добавьте словарь NSAppTransportSecurity в свой .plist и добавьте ключ NSAllowsArbitraryLoads в значение YES.

Я тестировал его, и он должен работать для вас.

+0

Спасибо. Это действительно работает. Я работаю в этом состоянии. Мой вопрос заключается в том, чтобы перейти к другому URL-адресу, если я нажму Quick Action, loadUrl2, который есть. –

+0

Является ли webView на вашем основном контроллере в вашем реальном приложении? –

+0

Да, это на главном экране –

Смежные вопросы