2017-05-26 4 views
0

Ich hatte etwas Code, den ich vor einiger Zeit verwendet habe, der perfekt funktionierte. Ich möchte nun in meinem neuen Projekt verwenden, die 3 swift ist und obwohl ich die meisten Fehler behoben haben Ich habe noch zwei wie folgt links:iOS Swift 3 POST-Ausgabe

Die folgende Codezeile: var _: NSData? = NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) as NSData erzeugt den folgenden Fehler: Call can throw, but it is not marked with 'try' and the error is not handled

Die folgende Codezeile: NSLog("Response code: %ld", res?.statusCode ?? <#default value#>); Erzeugt den folgenden Fehler: Editor placeholder in source file.

Jede Hilfe wird geschätzt.

Im Folgenden ist der vollständige Code, der das Problem lösen helfen können:

 func webViewDidFinishLoad(_ webView: UIWebView) { 
     UIApplication.shared.isNetworkActivityIndicatorVisible = false 

     let post:NSString = "userid=349&devicetoken=walan" 

     NSLog("PostData: %@",post); 

     let url:NSURL = NSURL(string: "https://str8red.com/updateAPN")! 

     let postData:NSData = post.data(using: String.Encoding.ascii.rawValue)! as NSData 

     let postLength:NSString = String(postData.length) as NSString 

     let request:NSMutableURLRequest = NSMutableURLRequest(url: url as URL) 
     request.httpMethod = "POST" 
     request.httpBody = postData as Data 
     request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
     request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
     request.setValue("application/json", forHTTPHeaderField: "Accept") 


     var _: NSError? 
     var response: URLResponse? 

     var _: NSData? = NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) as NSData 


     let res = response as! HTTPURLResponse!; 

     NSLog("Response code: %ld", res?.statusCode ?? <#default value#>); 

} 

Antwort

1

Sie versuchen, Stichwort hinzufügen könnte und die Anweisung mit do umgeben {} catch {} wie folgt:

do { 

try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) as NSData 
} catch { 
    print(error) 
} 

Sie wird immer noch eine Warnung über die Funktion ist seit iOS 9 veraltet.

Ich werde versuchen zu sehen, wie die gesamte Funktion in iOS 10, Swift 3.1 Syntax neu geschrieben werden könnte, aber es gibt eine da es könnte brechen und wird sehr anders aussehen als der Rest Ihres Legacy-Codes. Bleib dran, ich werde diese Antwort noch einmal aktualisieren.

Wie für den ‚Platzhalter Fehler‘ Sie einen Wert wie ‚500‘ setzen könnte zum Beispiel zu ‚Interner Serverfehler‘

NSLog("Response code: %ld", res?.statusCode ?? 500); 

aktualisieren auf Standard: Hier wird die Funktion Swift aktualisiert 3, iOS 10.

Ich nur auf der Grundlage der ursprünglichen Absicht der Funktion zu aktualisieren. Nur Syntax/API-Update, keine Entfernung/Hinzufügen von Funktionalität.

func webViewDidFinishLoad(_ webView: UIWebView) { 
    UIApplication.shared.isNetworkActivityIndicatorVisible = false 

    let post:String = "userid=349&devicetoken=walan" 

    NSLog("PostData: %@",post); 

    let url:URL = URL(string: "https://str8red.com/updateAPN")! 

    let postData:Data = post.data(using: String.Encoding(rawValue: String.Encoding.ascii.rawValue))! 

    let postLength: String = String(postData.count) 

    var request:URLRequest = URLRequest(url: url as URL) 

    request.httpMethod = "POST" 
    request.httpBody = postData as Data 
    request.setValue(postLength, forHTTPHeaderField: "Content-Length") 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    request.setValue("application/json", forHTTPHeaderField: "Accept") 

    var _: NSError? 
    var response: URLResponse? 

    URLSession.shared.dataTask(with: request) { (data, res, error) in 

     guard error == nil else { 
      print(error!) 
      return 
     } 

     response = res 
    } 

    let res = response as! HTTPURLResponse!; 

    NSLog("Response code: %ld", res?.statusCode ?? 500); 
} 
+0

Wenn Sie zufrieden sind, akzeptieren Sie bitte die Antwort und upvote es. Wenn Sie andere Frage haben, bitte kommentieren Sie. – Wismin