2016-02-25 20 views
10

Bir paylaşım uzantısında AFNetworking ile ilgili bir sorun yaşıyorum. didSelectPost, ben arayacağım:Başlarken Başarı/Başarısızlık Geri Bildirim Çağrısı AFNetworking kullanarak Uzantı

[[AuthClient sharedClient] POST: @"/v1/events" 
    parameters: params success:^(AFHTTPRequestOperation * operation, id responseObject) { 
     [self.extensionContext completeRequestReturningItems: nil completionHandler: nil]; 
    } 
    failure:^(AFHTTPRequestOperation * operation, NSError * error) { 
     NSLog(@"error: %@", error); 
     [self.extensionContext cancelRequestWithError: error]; 
    } 
]; 

[AuthClient sharedClient] bir arka plan tanımlayıcı ile NSURLSessionConfiguration set ile AFHTTPSessionManager bir örneğini almak için tekil deseni kullanır. Ancak, başarı veya başarısızlık geri bildirimleri çağrılmıyor ve uzantı öldürülünceye kadar yalnızca süresiz olarak askıda kalıyor. İlginç bir şekilde, HTTP isteği sunucu tarafında iyi tamamlanır; tamamlama sadece asla çağrılmaz.

+0

neden yeni AFN sınıfını denemiyorsunuz? –

+0

Hata ayıklayıcısını duraklatabilir ve tüm yığınlarınıza bakabilir misiniz? 2 tanesi aynı kilidi almaya çalışıyorlar. (ya da başkalarının kilitleri) – nielsbot

cevap

4

Sorun, AFNetworking ile ilgili değil, ancak sorun bu singleton sınıfında. Uygulamanızın mimarisini belirlemediniz, ancak varsayım ki, aynı görüntüleme modunda aynı [AuthClient sharedClient] singleton'u kullanarak birden çok API'yi farklı görüntüleme denetleyicilerine çağırabilirsiniz. Bu nedenle, aslında bir success çağrı alıyorsunuz, ancak yukarıdaki çağrı için değil, ancak kontrol cihazınızda başka bir yer var. Farklı görünüm denetleyicilerinde viewDidLoad numaralı API çağrılarını yaptığım UITabbarController tabanlı uygulamamda tam olarak karşılaştım ve test cihazım sürekli olarak tüm sekmeleri değiştiriyordu. Böylece, ilk görüntü denetleyicisi (1. sekme) için yanıt almayı denedim ve ikinci görüntü denetleyicisine (2. sekme) yanıt almak için kullanıyorum, bu yanlıştı!

+0

Katılıyorum ... Belki çağrılmıyor olduklarını doğrulamak için başarı bloğunda bir NSLog() satırı yapıştırın. Bir tekil üzerinde bir örnek değişkeni kullandığınızdan, sadece 1 uzatma içeriği olabilir, bu nedenle eğer bir başka birinin kovulduğu sırada bir aramanın uçuşta olması mümkün ise; o zaman sadece geri çağrıları alacak bir şey olacak. – Fiid

+0

Günlüğe kaydetme yardımcı olmadı, ancak sorun singleton'daydı. Uygulamaya özel ayrıntılara girmeyeceğim, ancak bu beni doğru yolda buldunuz – iMack

1

1) Tamam eğer, Postman bu isteği çalıştıracak için doğru yolu ve parametreleri kontrol etmek deneyin -> 2.

2) Bu bu

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 

// Initialize Session Manager 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration]; 

gibi oturum yapılandırmasını kullanmayı deneyin tek noktamızın farklı konfigürasyonlarla başka bir istek için başlatıldığını varsayabiliriz.

3) similar problem

4) about AFNetworking background

P.S. Denemek istediğiniz yanıtı

1

Bazı şeyler beklerken spinner ile, ana iş parçacığı üzerinde basit uyumsuz kullanmayı deneyin:

  • bir ağ izlemesi ile kontrol yapın; ve 'un beklediğiniz verilerin müşteriye ulaştığından emin olun.
  • Bir kesme noktası ayarlayın ve numaralı engellenen konu veya anormalliği arayın (hatta Apple networking API'lerini, örn. CFNetworking veya NSURLSession vb.).
  • lambda/completion bloklarının tekil nesneniz tarafından doğru şekilde ayarlandığını/korunduğunu kontrol edin/bir fark yaratıp yaratmadığını anlamak için tek birtonu kullanmadan basit bir test rutinini yazmaya çalışın (sınıfın elle başlatılması ve o).
  • 'Başarı' tamamlama işleyicisi bir hata ayıklama iletisi yazdırıyorsa, pasajdan net değildir. Zaten bir işleyicide değilse, NSLog eklemeyi de düşünebilirsiniz.

Bu durumdan bazıları, sorunun nedenine dair bir fikre daha da yaklaşmanızı sağlayabilir.