2016-04-08 13 views
0

GroupOperation'u alt sınıflara ayırıyorum ve başarısız olursa ve yeniden başlatma sayısı 5'ten azsa yeniden çalıştırmak istiyorum. Ayrıca delayOperation'u 3 saniye geciktiriyorum . Ancak bunu işe alamıyorum, şu ana kadar sahip olduğum şey:NSOperation operationDidDaha sonra hatalarla işlem yapın, sıraya yeniden işlem ekleyin

self.conversation bir nesnedir.

produceConversationOperation() operasyon ilk hatadan sonra tekrar çalışmıyor Nedense bir backgroundOperation

override func operationDidFinish(operation: NSOperation, withErrors errors: [NSError]) { 
    if let _ = errors.first { 
     if let _ = operation as? BackgroundOperation { 
      context.performBlockAndWait({() -> Void in 
       self.conversation.retryCountValue++ 

       if self.conversation.retryCountValue < 5 { 

        let postConversationOperation = self.produceConversationOperation() 
        let delayOperation = DelayOperation(interval: 3) 

        postConversationOperation.addDependency(delayOperation) 

        self.produceOperation(delayOperation) 
        self.produceOperation(postConversationOperation) 
       } 
       else { 
        self.conversation.retryCountValue = 0 
       } 

       self.saveContext() 
      }) 
     } 
    } 
} 

döndürür. Sorunun self.produceOperation yöntemiyle ilgili olduğunu hissediyorum, ancak hiçbir fikrim yok. Benzer sorulara birkaç çözüm var, ancak yardımcı olan hiçbir şey bulamadım.

Teşekkür

+0

Öneri yok? – mrcurious

+0

Yeni bir NSOperation nesnesi nasıl oluşturabilirim ve buradan kuyruğa nasıl eklerim? – mrcurious

cevap

1

biraz geç kaldın bu cevap, ancak bu sorunların çoğu destekleyen http://github.com/danthorpe/Operations den RetryOperation kullanarak kontrol etmek isteyebilirsiniz: yeniden deneme

  • özelleştirilebilir gecikme

    1. maksimum sayısı (ile
    2. rasgele/üstel/etc'ye gereksiniminiz varsa bir bekleme stratejisinumaralı çalışmayı kabul eder., yeniden denenecek olan işlemin bir sonraki örneğinin tüketicinin "ayarlanmasını" sağlayan bir "yeniden deneme işleyicisi" takip etme kapamasını kabul eder.

  • Ben aslında yepyeni bir örneğini oluşturarak olmadığını bir tahminde ediyorum, ama, ve produceOperation() ne yaptığını kesin bilmeden biraz daha somut olarak bu soruya cevap vermek için, ancak bazı şekilde orijinali dönüyor operasyon.

    +0

    Teşekkürler @DanielThorpe kontrol edecek – mrcurious

    +0

    Hey @DanielThorpe, Link için çok teşekkürler, projeme dahil ediyorum. Sadece gecikmeyi anlamak için uğraşıyorum, Jeneratör ve yeniden deneme parametresi, bunu bana açıklayabilir misiniz lütfen. Jeneratör tipi için, yeniden denemek istediğim işlemimin bir örneği olacağını varsayalım, diğer 2 parametreler olarak ne geçeceğinden emin değilim. Gerçekten bir deneme bloğuna ihtiyacım yok ama buna nil geçemiyorum. Teşekkürler – mrcurious

    +0

    @ Daniel.Thorpe herhangi bir örnek? – mrcurious