2016-04-12 5 views
2

İstek zaman aşımına uğradığında işlevimden nasıl çıkabileceğimi merak ediyorum. Benim sunucu çevrimdışı koymak ve bu işlevle bazı görüşmeler yapmayı denerseniz uygulama kilitlenmesine dolayı: beklenmedik bir Opsiyonel değerini unwrapping ederken nil bulundu Swift Alamofire zaman aşımına uğradığında çıkılıyor

Benim Alamofire v3.x fonksiyonu şöyle

: önemli hata : let json = JSON(responseData.result.value!)

yanılma:

static func loginWithFb(facebookId: String, email: String, username: String, response: (token: String?, errorVal: JSON?) ->()) { 
     let urlString = baseURL + ResourcePath.FbLogin.description 

     let parameters: [String: AnyObject] = [ 
      "facebook_id": facebookId, 
      "user_type": 1, 
      "email": email, 
      "username": username 
     ] 
     Alamofire.request(.POST, urlString, parameters: parameters).responseJSON{ (responseData) -> Void in 

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

      let token = json["api_key"].string 
      response(token: token, errorVal: json) 
     } 

    } 

ben den nil olsun

FAILURE: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x7fc39349c4a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://mysite.dev/fb, NSErrorFailingURLKey=http://mysite.dev/fb, 
_kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.} 
fatal error: unexpectedly found nil while unwrapping an Optional value 

İstek zaman aşımına uğradıysa, çağrıdan nasıl çıkabilirim?

cevap

2

Servisiniz uzun sürüyorsa, zaman aşımı süresini artırabilirsiniz. Önemli hata sorununu çözmek için yanıtın sıfır olmadığını kontrol etmeliyiz ve denetlemelisiniz.

+2

nolu parametre ve üstbilgileri nasıl geçtiğini tahmin edersiniz. –

+0

Ayrıca param göndermek istiyorum ama nasıl bilmiyorum –

1

Sorununuz burada

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

olduğunu json veri

sayesinde almaya çalışırken engelleyen Eğer kuvvet value! yerine bir if let

if let json = JSON(responseData.result.value) as? NSDictionary { 
      let token = json["api_key"].string 
      response(token: token, errorVal: json) 
} 

sarın gerektiğini unwrapping vardır Zaman aşımı iyi ve uygulamanızı herhangi bir şekilde etkilemiyor.

+0

Teşekkürler ama böyle bir şekilde koymayı denedim ama şunu aldım: "İsteğe bağlı türün değeri 'AnyObject' istenmeyen bir şey değil, '!' Demek istediniz mi? ya da '?' – user2722667

+0

Düzenledim, JSON yöntemini göndermediniz, bu yüzden bir NSDictionary – SeanLintern88

1

hızlı değişken unwrapping hakkında daha fazla bilgi sahibi olmanız yeterlidir, basit bir if(myJsonData != nil) uygulama kilitlenmesini engeller, ayrıca sunucuda herhangi bir veri olmaması veya sunucunun kapalı olması durumunda bir uyarı kutusu ekleyebilirsiniz ...