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
进行检查:
GeneratorType
不过,为了更具体地回答这个问题,在不确切知道
produceOperation()
在做什么的情况下,我会冒险猜测它实际上并没有创建一个新实例,而是以某种方式返回了原始操作 回答此问题有点晚,但您可能希望使用支持以下许多问题的RetryOperation
进行检查:
GeneratorType
不过,为了更具体地回答这个问题,在不确切知道
produceOperation()
在做什么的情况下,我会冒险猜测它实际上并没有创建一个新实例,而是以某种方式返回了原始操作 我如何创建一个新的NSOperation对象并将其添加到队列中?我如何创建一个新的NSOperation对象并将其添加到队列中?感谢@DanielThorpe将对其进行检查@DanielThorpe,非常感谢链接,我正在将其纳入我的项目中。我正在努力理解延迟、生成器和重试参数,请您向我解释一下。对于Generator类型,我假设这是我要重试的操作的一个实例,另外两个我不确定作为参数传递什么。我真的不需要重试块,但无法将nil传递给它。Thanks@Daniel.Thorpe有什么例子吗?@MrQuirative-我在这里回答了一个相关的问题:谢谢@DanielThorpe会查看的嘿@DanielThorpe,非常感谢链接,我正在将其纳入我的项目中。我正在努力理解延迟、生成器和重试参数,请您向我解释一下。对于Generator类型,我假设这是我要重试的操作的一个实例,另外两个我不确定作为参数传递什么。我真的不需要重试块,但无法将nil传递给它。Thanks@Daniel.Thorpe有什么例子吗?@好奇先生-我在这里回答了一个相关的问题: