使用Xcode的-8.2.1,斯威夫特-3.0.2,RealmSwift-2.2.0,iOS的模擬器-10:境界異步線程斯威夫特3
想寫一個視圖模型與領域,對象,我無法在另一個線程中創建returnArray。問題是對先前創建的領域對象的訪問失敗(很可能是由於後臺線程訪問?)。
有人可以告訴我什麼是錯誤的,下面的代碼(見下文): 重要提示:在「getEntries-completionHandler」之前調用「createDataEntries() - 方法」正確的SimPholders realmobject-entry)!因此,「類別」被設置爲「愛」(見代碼)
import Foundation
import RealmSwift
class MVVMCBalancesModel: BalancesModel
{
fileprivate var entries = [BalancesDataEntry]()
let realm = try! Realm()
init() {
self.createDataEntries()
}
fileprivate func createDataEntries() {
let myBalance = BalancesDataEntry()
myBalance.index = 0
myBalance.category = "Love" // !!!!!!! Here the category is filled
try! self.realm.write {
self.realm.deleteAll()
self.realm.add(myBalance)
}
}
func getEntries(_ completionHandler: @escaping (_ entries: [BalancesDataEntry]) -> Void)
{
// Simulate Aysnchronous data access
DispatchQueue.global().async {
var returnArray: [BalancesDataEntry] = [BalancesDataEntry]()
let realmy = try! Realm()
let cnt = realmy.objects(BalancesDataEntry.self).count
for idx in 0 ..< cnt {
let obj = realmy.objects(BalancesDataEntry.self).filter("index = \(idx)").first!
returnArray.append(obj)
}
completionHandler(returnArray) // !!!!!!! BREAKPOINT (see screenshot below)
}
}
}
運行上面的代碼和設置在completionHandler(returnArray)斷點產生以下:
爲什麼是returnArray的「類別」是一個空字符串?
哦,我不知道!這是一個相當的陷阱!你是完全正確的,一旦我做了print(returnArray [0] .category),正確的值'Love'顯示在控制檯中。而且你的Xcode的LLDB控制檯的'po returnArray'也能工作!非常感謝你的解釋。 – iKK
也在調試器中,如果你這樣做:「po returnArray [0] .category」的作品 – jerrygdm