我有一个json文件存储在远程服务器上,我正在使用dataTaskWithURL获取数据(36k条记录)。返回的是JSON(SwiftyJSON),下面是我的完成处理程序。
问题是,一旦我开始进行realm create的操作,所有其他回调就停止执行,直到realm commit发生。我希望这个任务在后台运行并插入数据,让用户继续他们快乐的方式而不会受到影响。
似乎阻塞发生在realm.beginWrite()之后。
在上面的调用进行时,我有另一个调用:
问题是,一旦我开始进行realm create的操作,所有其他回调就停止执行,直到realm commit发生。我希望这个任务在后台运行并插入数据,让用户继续他们快乐的方式而不会受到影响。
似乎阻塞发生在realm.beginWrite()之后。
RemoteAPI().getMetafile({JSONData, error -> Void in
if (JSONData != nil) {
do {
print("***** Loading realm")
let realm = try Realm()
realm.beginWrite()
for (_, subJSON) in JSONData {
realm.create(Meta.self, value: ["xxxxxx": subJSON["xxxxx"].int!, "xxxxx": subJSON["xxxxx"].stringValue, "xxxxx": subJSON["xxxxx"].stringValue, "xxxxxx": subJSON["xxxxxx"].int!, "xxxxxx": subJSON["xxxxx"].stringValue, "xxxxx": subJSON["xxxxx"].stringValue, "xxxxxx": subJSON["xxxxx"].stringValue], update: true)
}
try realm.commitWrite()
print("***** Finished loading realm")
} catch _ {}
} else {
print("api data fetch failed")
print(error)
}
})
在上面的调用进行时,我有另一个调用:
RemoteAPI().getLatestActivityData({JSONData, error -> Void in
if (JSONData != nil) {
// do stuff
dispatch_async(dispatch_get_main_queue(), {
NSNotificationCenter.defaultCenter().postNotificationName("refreshTableView", object: nil)
})
}
})
这两个调用都来自应用代理。然而,问题在于第二个调用中的观察者要等到上面的第一个调用完成后才会触发。