在performQuery
裏面另一個performQuery
被調用。兩個參數的recordType
參數相同,但predicate
不同。兩個CloudKit可以相互調用死鎖嗎?怎麼修?
第二個performQuery
從未返回,該應用程序僅運行並等待CloudKit做出響應。
的僞代碼是這樣的:
publicDatabase.performQuery(CKQuery(recordType: recordTypeSrc, predicate: predicate), inZoneWithID: nil, completionHandler: {records, error in
if error == nil {
//.. problem is not name collision or reusing the same parameter, coming codepart is called though other methods
publicDatabase.performQuery(CKQuery(recordType: recordTypeSrc, predicate: predicate2), inZoneWithID: nil, completionHandler: {records, error in
//THIS LINE WILL NEVER GET REACHED
if error == nil {
} else {
println(error.localizedDescription)
}
dispatch_semaphore_signal(sema2)
})
dispatch_semaphore_wait(sema2, DISPATCH_TIME_FOREVER)
//..
} else {
println(error.localizedDescription)
}
dispatch_semaphore_signal(sema)
})
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER)
我用兩個不同的信號 – 2014-10-10 09:25:57
啊,好吧,你不需要2信號燈的,你可以使用我上面提到的結構。它不應該是一個接一個執行多個查詢的問題。我以前做過。也許嘗試執行沒有信號量的代碼?那麼至少你應該看到一些日誌記錄(如果你有這個) – 2014-10-10 09:28:08
我不能留下信號量,外層查詢需要內層查詢返回值,看起來儘管它只是一個讀操作,CloudKit鎖表直到關閉結束 – 2014-10-10 10:06:38