Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSOperation operationDidFinish出现错误,请再次将操作添加到队列_Ios_Objective C_Xcode_Swift_Nsoperation - Fatal编程技术网

Ios NSOperation operationDidFinish出现错误,请再次将操作添加到队列

Ios NSOperation operationDidFinish出现错误,请再次将操作添加到队列,ios,objective-c,xcode,swift,nsoperation,Ios,Objective C,Xcode,Swift,Nsoperation,我正在对一个GroupOperation进行子类化,如果它失败并且尝试次数少于5次,我希望再次运行它。我还有一个delayOperation将其延迟3秒。我无法让它工作,但是,这是我目前所拥有的: self.conversation是一个对象 produceConversationOperation()返回背景操作 override func operationDidFinish(operation: NSOperation, withErrors errors: [NSError]) {

我正在对一个
GroupOperation
进行子类化,如果它失败并且尝试次数少于5次,我希望再次运行它。我还有一个
delayOperation
将其延迟3秒。我无法让它工作,但是,这是我目前所拥有的:

self.conversation
是一个对象

produceConversationOperation()
返回背景操作

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()  
            })  
        }  
    }  
}  
重写函数操作didfish(操作:NSOperation,错误:[NSError]){
如果让u=errors.first{
如果让u=操作作为背景操作{
performBlockAndWait({()->中的Void)
self.conversation.retryCountValue++
如果self.conversation.retryCountValue<5{
让postConversationOperation=self.produceConversationOperation()
让delayOperation=delayOperation(间隔:3)
postConversationOperation.addDependency(delayOperation)
自生产操作(延迟操作)
自生产作业(会后作业)
}  
否则{
self.conversation.retryCountValue=0
}  
self.saveContext()
})  
}  
}  
}  
由于某些原因,在第一次失败后,操作不会再次运行。我感觉问题出在self.produceOperation方法上,但我不知道是什么。 对于类似的问题有一些解决方案,但我没有发现任何有帮助的


谢谢

回答这个问题有点晚了,但是您可能希望使用支持以下许多问题的
RetryOperation
进行检查:

  • 最大重试次数
  • 可定制延迟(如果需要随机/指数/etc,则使用等待策略)
  • 它接受操作的
    GeneratorType
  • 它接受一个“重试处理程序”尾部闭包,允许使用者“调整”将重试的操作的下一个实例

  • 不过,为了更具体地回答这个问题,在不确切知道
    produceOperation()
    在做什么的情况下,我会冒险猜测它实际上并没有创建一个新实例,而是以某种方式返回了原始操作

    回答此问题有点晚,但您可能希望使用支持以下许多问题的
    RetryOperation
    进行检查:

  • 最大重试次数
  • 可定制延迟(如果需要随机/指数/etc,则使用等待策略)
  • 它接受操作的
    GeneratorType
  • 它接受一个“重试处理程序”尾部闭包,允许使用者“调整”将重试的操作的下一个实例

  • 不过,为了更具体地回答这个问题,在不确切知道
    produceOperation()
    在做什么的情况下,我会冒险猜测它实际上并没有创建一个新实例,而是以某种方式返回了原始操作

    我如何创建一个新的NSOperation对象并将其添加到队列中?我如何创建一个新的NSOperation对象并将其添加到队列中?感谢@DanielThorpe将对其进行检查@DanielThorpe,非常感谢链接,我正在将其纳入我的项目中。我正在努力理解延迟、生成器和重试参数,请您向我解释一下。对于Generator类型,我假设这是我要重试的操作的一个实例,另外两个我不确定作为参数传递什么。我真的不需要重试块,但无法将nil传递给它。Thanks@Daniel.Thorpe有什么例子吗?@MrQuirative-我在这里回答了一个相关的问题:谢谢@DanielThorpe会查看的嘿@DanielThorpe,非常感谢链接,我正在将其纳入我的项目中。我正在努力理解延迟、生成器和重试参数,请您向我解释一下。对于Generator类型,我假设这是我要重试的操作的一个实例,另外两个我不确定作为参数传递什么。我真的不需要重试块,但无法将nil传递给它。Thanks@Daniel.Thorpe有什么例子吗?@好奇先生-我在这里回答了一个相关的问题: