我希望UIViewController成为DataModel的委托。
在我的数据模型中,当我实例化它时,从解析中有一个延迟的数据加载,这基本上是从app delegate的applicationDidBecomeActive(application: UIApplication)
函数发生的,在我的数据模型中,我通过{获取Parse对象{1}}功能。
我希望在成功块中调用委托。 我想知道是否可以创建数据模型的UIViewController委托?如果是的话任何一个例子。
这就是我目前正在做的事情 -
在App Delegate中 -
Query.findObjectsInBackgroundWithBlock({ (success, error:NSError?)
在数据模型类中 -
class AppDelegate: UIResponder, UIApplicationDelegate {
let dataModel = DataModel()
func applicationDidBecomeActive(application: UIApplication) {
dataModel.handleFirstTime()
}
}
在我的ViewController中 -
protocol DataModelDelegate:class{
func dataDidLoad(controller:DataModel)
func dataHaveError(controller:DataModel)}
class DataModel {
weak var delegate:DataModelDelegate?
var dataApplied = [PFObject]()
func handleFirstTime(){
let appliedQuery = PFQuery(className: "DummyClass")
appliedQuery.findObjectsInBackgroundWithBlock({ (success, error:NSError?) -> Void in
if error != nil {
print(error?.userInfo)
}else{
dataApplied = success!
self.delegate?.dataDidLoad(self)
print(dataApplied.count)
}
})
}
}
答案 0 :(得分:1)
嗯,你的代码一见钟情就好了。但问题是你在DataModel
的另一个对象上设置视图控制器委托。
您需要确保不在DataModel
中创建tableViewController
的另一个对象,并使用您在AppDelegate
中创建的同一对象,因为这是您用来触发的对象你的handleFirstTime()
功能。
因此,您的表控制器正在监视对象2,而在handleFirstTime()
中,正在调用对象1上的委托。
作为旁注,如果您从许多地方访问此对象,也可以尝试使用单身DataModel
。