2016-12-22 3 views
0

Ich versuche, meine WebView-URL zu ändern, aber jedes Mal bekomme ich fatal error: unexpectedly found nil while unwrapping an Optional value.WebView: Schwerwiegender Fehler: unerwartet gefunden Null beim Entpacken ein optionaler Wert

Was ist los? Vielen Dank.

@IBOutlet weak var myWebView: UIWebView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    myWebView.delegate = self 
    let url = NSURL (string: "http://cnn.com"); 
    let requestObj = NSURLRequest(url: url! as URL); 
    myWebView.loadRequest(requestObj as URLRequest); 

} 

func changeURL(urlIncome:String) { 
     let url = NSURL(string: urlIncome) 
     let requestObj = NSURLRequest(url: url as! URL) 
     myWebView.loadRequest(requestObj as URLRequest); 
} 

Mein AppDelegate Code:

class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 
var vc = ViewController() 


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    UIApplication.shared.statusBarStyle = .lightContent 

    OneSignal.initWithLaunchOptions(launchOptions, appId: "", handleNotificationReceived: { (notification) in 

     let payload = notification?.payload 
     //let fullMessage = payload?.title 
     if let additionalData = payload?.additionalData, let actionURL = additionalData["url"] as? String { 
      self.vc.changeURL(urlIncome: actionURL); 
     } 

    }, handleNotificationAction: { (result) in 

     // This block gets called when the user reacts to a notification received 
     let payload = result?.notification.payload 
     let fullMessage = payload?.title 

     NSLog(fullMessage!); 

    }, settings: [kOSSettingsKeyAutoPrompt : true, kOSSettingsKeyInFocusDisplayOption : false]) 



    // Override point for customization after application launch. 
    return true 
} 
+0

In welcher Zeile bekommen Sie diesen Absturz? Was ist der Wert von urlIncome? –

+0

Ist urlIncome eine gültige URL? Wenn nicht NSURL (string: urlIncome) wird Null zurückgeben und Sie erhalten den Fehler, den Sie sehen) – mlidal

+2

Hinweis: erzwingen Sie nicht Downcast URL und URLRequest. Siehe http://stackoverflow.com/questions/37812286/swift-3-urlsession-shared-ambiguous-reference-to-member-datataskwithcomplet/37812485#37812485 und Prozentcode für Ihre URL: http://stackoverflow.com/a/ 30149081/2227743 – Moritz

Antwort

0

Der Grund, warum seine Krachen ist, weil Sie Kraft sind Casting-URL und URL-Anfrage.

Ändern Sie den Code unten

let url = NSURL (string: "http://cnn.com"); 
let requestObj = NSURLRequest(url: url! as URL); 
myWebView.loadRequest(requestObj as URLRequest); 

zu

let url = URL(string: "http://google.com")! 
myWebView.loadRequest(URLRequest(url: url)) 
+0

Ich bekomme immer noch den gleichen Fehler. –

+0

Können Sie versuchen, mit anderen URL.Kann sagen Sie mir, wo Sie Fehler konfrontiert sind. –

+0

Scheint nicht Ihr Code zu sein. Ich habe einen Haltepunkt gesetzt und keinen Fehler angezeigt. –

0

Dies ist ein Code ich in Swift gerade getestet haben 3 mit Deployment Target 9.0 Set in Allgemeine Registerkarte in 8.2 XCode . Es funktioniert reibungslos, hoffe, das hilft:

Ihre ViewController.swift:

var myUrl = "" 

override func viewDidLoad() { 
     super.viewDidLoad() 

     if myUrl == "" { 
let url = URL (string: "http://cnn.com") 
webView.delegate = self 
webView.loadRequest(URLRequest(url: url!)) 
} else { 
let url = URL (string: myUrl) 
webView.delegate = self 
webView.loadRequest(URLRequest(url: url!)) 
} 

    } 

AppDelegate:

if let additionalData = payload?.additionalData, let actionURL = additionalData["url"] as? String { 
      let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let myVC : UIViewController = mainStoryboardIpad.instantiateViewControllerWithIdentifier("ViewController") as UIViewController 
myVC.myUrl = actionURL 
     self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
     self.window?.rootViewController = initialViewControlleripad 
     self.window?.makeKeyAndVisible() 
     } 

Denken Sie auch daran App Transport Security in Ihre Info.plist Datei hinzufügen um Arbitrary Loads zu erlauben (außer du hast das schon gemacht :)

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
    </dict> 
+0

Funktioniert einfach nicht. Ich rufe die ChangeURL von meinem AppDelegate, wenn ich einen Push erhalte. –

+0

Zeigen Sie den Code im App-Delegaten an, in dem Sie 'changeURL' aufrufen. Wahrscheinlich tust du es falsch, was dazu führt, dass 'myWebView'' nil' ist. – dan

+0

ok, ich dachte, du hättest diese changeURL() -Funktion aus der gleichen schnellen Datei aufgerufen, die dein WebView hostet. Dann sollten Sie überprüfen, ob der Code, den Sie für empfangene Benachrichtigungen haben, gut mit einem print() funktioniert, und diesen Code als @dan notiert – cubycode

Verwandte Themen