2013-03-20 14 views
5

Büyük olasılıkla oldukça önemsiz bir soru ama tamamlama bloğu her zaman [NSURLConnection sendAsynchronousRequest: ...] kullanarak çağrılacak? VEYA zaman aşımı zamanlayıcısı uygulamak zorunda mıyım?[NSURLConnection sendAsynchronousRequest: ...] her zaman tamamlama bloğu gönderecek mi?

[self showHUDWithTitle:@"Configuring"]; 
[NSURLConnection sendAsynchronousRequest:request 
            queue:[[NSOperationQueue alloc] init] 
         completionHandler:^(NSURLResponse *response, 
              NSData *data, 
              NSError *error) { 

    if ([data length] >0 && error == nil) { 
     [self hideHUDWithFlag:YES 
         andTitle:@"Finished" 
        andSubtitle:@"(Box was configured)"]; 

    } else if ([data length] == 0 && error == nil) { 
     [self hideHUDWithFlag:NO 
         andTitle:@"Failed" 
        andSubtitle:@"(Check box connection)"]; 
     NSLog(@"Nothing was downloaded."); 

    } else if (error != nil) { 
     [self hideHUDWithFlag:NO 
        andTitle:@"Error" 
        andSubtitle:@"(Check box connection)"]; 
     NSLog(@"Error = %@", error); 
    } 
}]; 
+0

. Bir tamamlama işleyicisi bir COMPLETION işleyicidir - başarı işleyicisi değil: D –

+0

@ Daij-Djan Tamamlama işlemini tamamlayan tamamlayıcı değil, başarı işleyiciyim! – Groot

+1

if (! Error) = başarı: D –

cevap

15

Evet, tamamlama işleyicisi her zaman çağrılır. İstek bir zaman aşımı nedeniyle başarısız olursa, error ayarlanacak ve data = nil.

A NSURLRequest'un varsayılan zaman aşımı 60 saniyedir, ancak bağlantıyı başlatmadan önce request.timeoutInverval'a farklı bir değer atayabilirsiniz. Yani ekstra zamanlayıcıya gerek yok.

Eklendi: zaman aşımı halinde:

  • [error domain]NSURLErrorDomain ve
  • [error code]NSURLErrorTimedOut olduğunu

sadece bir hata mesajı sunmak istiyorsanız, size "İstek zaman aşımına uğradı" olan [error localizedDescription]'u kullanabilir. bu durumda. (Bu, yerel ayarlara bağlı olabilir.) Doğal olarak doğal olarak

+0

Harika cevap, teşekkürler! – Groot

+0

@Filip: Rica ederim. Zaman aşımı için nasıl kontrol edebileceğinize dair bazı bilgiler ekledim. –

0

[NSURLConnection sendAsynchronousRequest: ...] kesinlikle herhangi bir senaryoda bir tamamlama bloğu arayacak ben SADECE tamamlama bloğunda aramadan önce MBProgressView eklemek ve kaldırmak nerede

aşağıdaki düşünün. Ancak, bu işlemi maksimum zamana sınırlamak istiyorsanız, zaman aşımı zamanlayıcısını da kullanabilirsiniz.

İlerleme çubuğu için değeri nasıl artırıyorsunuz? İlerleme çubuğu yerine, etkinlik göstergesine gitmenizi öneririm.

Bu yardımcı olur umarım.

2
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url 
               cachePolicy:NSURLCacheStorageAllowed    
              timeoutInterval:20]; 
+2

Lütfen ne yaptığınızı ve nedenini açıklamaya çalışın. İnsanlar nadiren sadece kod cevaplarından öğrenirler. – Jasper

İlgili konular