每当我cancelAllOperations()
时,我都会收到这条奇妙的信息:
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [__ NSOperationInternal _start:]:某些东西试图同时从多个线程启动接收器' ***第一次抛出调用堆栈: (0x1935321c0 0x191f6c55c 0x193532108 0x193f2b788 0x193ff8b00 0x1923bd1c0 0x1923cb444 0x1923c09a8 0x1923cd38c 0x1923cd0ec 0x1925c62b8 0x1925c5da4) libc ++ abi.dylib:以NSException类型的未捕获异常终止
这可能不是2008年在OSX中发现的同一个bug 并在这里描述 https://www.mikeash.com/pyblog/dont-use-nsoperationqueue.html ?
虽然在我的情况下,这是一个零努力的出现:一直在旅行。
这伴随着 < myoperationnameishere> 0x17425e240去了isFinished = YES而没有被它所在的队列启动
有大量的操作类型,所以我不在这里列出它们。
但是,所有这些都来自这个类。
public class AsynchronousOperation: NSOperation {
// MARK: - Types
public enum State {
case Ready, Executing, Finished
func keyPath() -> String {
switch self {
case Ready:
return "isReady"
case Executing:
return "isExecuting"
case Finished:
return "isFinished"
}
}
}
public override init() {
state = State.Ready
super.init()
}
// MARK: - Properties
public var state = State.Ready {
willSet {
willChangeValueForKey(newValue.keyPath())
willChangeValueForKey(state.keyPath())
}
didSet {
Util.log("\(self.dynamicType) \(oldValue) -> \(state)", dc: [.Operation])
didChangeValueForKey(oldValue.keyPath())
didChangeValueForKey(state.keyPath())
}
}
// MARK: - NSOperation
override public var ready: Bool {
return super.ready && state == .Ready
}
override public var executing: Bool {
return state == .Executing
}
override public var finished: Bool {
return state == .Finished
}
public override func cancel() {
super.cancel()
state = .Finished
}
}
答案 0 :(得分:1)
这伴随着0x17425e240去了 isFinished = YES,而不是由
中的队列启动
是线索。 以及: NSOperationQueue not working in IOS5
我在覆盖的cancel()方法中将isfinished设置为true 在继承树的下一步操作
这对于尚未取消的操作不正确 已经开始了
现在,这是关闭警报铃声