У меня возникли проблемы с пониманием того, как создать синхронный NSOperationQueue. Я создал прототип, который в основном говорит:Устранение неполадок NSOperation & NSOperationQueue (swift)
- Создание 4 операции, очень длинные или очень короткие, чтобы завершить
- Независимо от времени, чтобы закончить, они должны закончить в порядке, в котором они созданы очереди.
Мой NSOperation класс очень просто:
class LGOperation : NSOperation
{
private var operation:() ->()
init(operation:() ->())
{
self.operation = operation
}
override func main()
{
if self.cancelled {
return
}
operation()
}
}
И мой тестовый класс также достаточно прост:
class LGOperationTest
{
class func downloadImage(url: String)
{
// This is a simple AFHTTPRequestOperation for the image
LGImageHelper.downloadImageWithUrl(url, complete: { (image: AnyObject?) in
println("downloaded \(url)")
})
}
class func test()
{
var queue = NSOperationQueue.mainQueue()
queue.maxConcurrentOperationCount = 1
var op1 = LGOperation(operation: { self.downloadImage("http://www.toysrus.com/graphics/tru_prod_images/Animal-Planet-T-Rex---Grey--pTRU1-2909995dt.jpg") })
var op2 = LGOperation(operation: { println("OPERATION 2") })
var op3 = LGOperation(operation: { self.downloadImage("http://www.badassoftheweek.com/trex.jpg") })
var op4 = LGOperation(operation: { println("OPERATION 3") })
var ops: [NSOperation] = [op1, op2, op3, op4]
op2.addDependency(op1)
op3.addDependency(op2)
op4.addDependency(op3)
op4.completionBlock = {
println("finished op 4")
}
queue.addOperation(op1)
queue.addOperation(op2)
queue.addOperation(op3)
queue.addOperation(op4)
println("DONE")
}
}
Так что я бы ожидать здесь для операции, чтобы закончить в порядке, вместо этого выход:
- DONE
- РАБОТА 2
- РАБОТА 4
- законченный цит 4
- скачано http://www.toysrus.com/graphics/tru_prod_images/Animal-Planet-T-Rex---Grey--pTRU1-2909995dt.jpg
- скачано http://www.badassoftheweek.com/trex.jpg
Почему я не могу сделать веб-запросы огня синхронно с другим кодом? (Я знаю, что могу использовать блоки завершения и связывать их, но я хотел бы выяснить, как это сделать с NSOperation)