我想实现以下目标:
reloadDatabase()
。 reloadDatabase()
将调用getObjects()
中的classA
以获取最新的数据库对象列表,并传递给classB中的objectList
问题:我如何确保每当我在classB中调用getObjectList()
时,我将始终获得最新的列表?据我了解,我的objectList
可能不会在reloadDatabase() block
中更新。当getObjectList()
尚未到达完成块时,我可以调用reloadDatabase()
(objectList仍然是旧的objectList)。
我对闭包和块很新。非常感谢任何指导!
class classA: NSObject {
func addThisObject(object: RLMObject, completionBlock: () -> ())){
...
completionBlock()
}
func getObjects (completionBlock: ((list: [RLMObject]) -> ())){
var recordList = [RLMObject]()
...
completionBlock(list: recordList)
}
}
class classB: NSObject {
var objectList = [RLMObject]()
func addObject (object: RLMObject) {
classA().addThisObject(object, completionBlock: {() -> () in
self.reloadDatabase()
})
}
func reloadDatabase() {
classA().getObjects{(list) -> () in
self.objectList = list
}
}
func getObjectList() -> [RLMObject] {
return objectList
}
}
答案 0 :(得分:0)
在你的问题中,你不会说你是否会从不同的线程中调用这些函数中的任何一个。因此,当您在classB中调用addObject()时,执行将不会继续,直到重新加载数据库并更新objectList。
使用闭包和块并不会自动暗示代码将在不同的上下文中执行。
答案 1 :(得分:0)
在您的代码段中,我似乎没有异步调用,因此您无法在getObjectList()
阻止之前调用reloadDatabase()
。如果您不将它们与某些东西(例如GCD)一起使用,则闭包不是异步的。
如果您有异步调用,但它们不在代码段中,则在getObjectList()
执行时可以调用reloadDatabase()
。那么你有几个选择:
updateInProgress
并在getObjectList()
- how to do it