2016-05-29 17 views
5

Problemy ze zrozumieniem raportu o awarii w Crashlytics.częściowe zastosowanie do Thunk Crash.

To dziennik katastrofy:

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) 

i odnośne źródło:

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) 
    } 
} 

Domyślam robię coś złego, jak używam completionHandler? Ale nie wszystkim się to zdarza. Nie mogę odtworzyć awarii, ale kilku moich użytkowników ją otrzymuje.

+4

Bezpośrednim podejrzani są wykrzykniki. W linii 10 upewnij się, że wartość nie jest null –

+1

Zgadzam się z @UriBrecher. Mówisz "spróbuj!" Dwa razy. Oznacza to, że "złamcie mnie". Trudno się dziwić, gdy Swift robi to, o co go prosiłeś. – matt

Odpowiedz

2

Zgadzając zarówno @Uri i @matt - w przypadku, gdy nie wiem składni DO/catch, tutaj jest to, jak te linie powinny być realizowane:

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