2016-05-29 7 views
5

Probleme beim Verständnis eines Absturzberichts in Crashlytics.teilweise gelten für Thunk Crash.

Dies ist das Crash-Protokoll:

Crashed: com.apple.main-thread 
0 Rekindlr      0x10007a728 ViewController.(user_info(Match?, completionHandler : (Bool?) ->()) ->()).(closure #1) (ViewController.swift:201) 
1 Alamofire      0x100156678 partial apply for thunk (ResponseSerialization.swift) 
2 Alamofire      0x10015891c specialized Request.(response<A where ...> (queue : OS_dispatch_queue?, responseSerializer : A, completionHandler : (Response<A.SerializedObject, A.ErrorObject>) ->()) -> Self).(closure #1).(closure #1) (ResponseSerialization.swift:131) 
3 libdispatch.dylib    0x1827614bc _dispatch_call_block_and_release + 24 
4 libdispatch.dylib    0x18276147c _dispatch_client_callout + 16 
5 libdispatch.dylib    0x182766b84 _dispatch_main_queue_callback_4CF + 1844 
6 CoreFoundation     0x182cccdd8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 
7 CoreFoundation     0x182ccac40 __CFRunLoopRun + 1628 
8 CoreFoundation     0x182bf4d10 CFRunLoopRunSpecific + 384 
9 GraphicsServices    0x1844dc088 GSEventRunModal + 180 
10 UIKit       0x187ec9f70 UIApplicationMain + 204 
11 Rekindlr      0x10007d4e4 main (AppDelegate.swift:17) 
12 libdispatch.dylib    0x1827928b8 (Missing) 

und die damit verbundene Quelle:

typealias CompletionHandler = (success: Bool) -> Void 


func user_info(match:(Match?), completionHandler:CompletionHandler) { 
    var tind_id = match!.tinder_id 
    var user_url = "\(USER_INFO_URL)\(tind_id)" 
    Alamofire.request(.GET, user_url, headers: ["X-Auth-Token": tinder_token], encoding: .JSON) 
     .responseJSON { response in 

      let json = JSON(response.result.value!) 

      var result = json["results"] 
      var distance = result["distance_mi"].intValue 

      let realm = try! Realm() 

      try! realm.write { 
       match?.distance_km = round(Double(distance)/0.62137) 
      } 

      completionHandler(success: true) 
    } 
} 

ich ich bin zu raten, tue etwas falsch mit, wie ich completionHandler verwende? Aber es passiert nicht jedem. Ich kann den Absturz nicht reproduzieren, aber ein paar meiner Benutzer bekommen es.

+4

Die unmittelbar Verdächtigen die Ausrufungszeichen sind. Bei Zeile 10 stelle sicher, dass der Wert nicht null ist –

+1

Ich stimme @UriBrecher zu. Du sagst zweimal "Versuch!" Das bedeutet "bitte crash me". Du kannst kaum überrascht sein, wenn Swift tut, was du verlangst. – matt

Antwort

2

sowohl mit @Uri und @ Matt Einigung - falls Sie nicht die do/catch Syntax wissen, hier ist, wie diese Linien umgesetzt werden sollen:

do { 
    let realm = try Realm() 
    try realm.write { 
    match?.distance_km = round(Double(distance)/0.62137) 
    } 
}catch { 
    print(error) 
}