我想要一个UIViewController作为DataModel的代表。
在我的数据模型中,当我实例化它时,会有来自解析的数据的延迟加载,这基本上发生在app委托的applicationDidBecomeActive(application: UIApplication)函数中,而在我的数据模型中,我是通过Query.findObjectsInBackgroundWithBlock({ (success, error:NSError?)函数获取解析对象。
我希望代表们被召集到成功的街区。我想知道是否有可能对数据模型进行UIViewController委托?如果是的话任何例子。
我现在就是这么做的-
在应用程序代表中-
class AppDelegate: UIResponder, UIApplicationDelegate {
let dataModel = DataModel()
func applicationDidBecomeActive(application: UIApplication) {
dataModel.handleFirstTime()
}
}在数据模型类中-
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)
}
})
}
}在我的ViewController里-
class tableViewController: UITableViewController,DataModelDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let dataModel:DataModel = DataModel()
dataModel.delegate = self
}
func dataDidLoad(controller: DataModel) {
print("TableView Reload trigger")
tableView.reloadData()
}
//There are other TableView Controller related methods
}发布于 2015-10-08 07:08:38
好吧,你的代码乍一看都很好。但这里的问题是,您要在DataModel的另一个对象上设置视图控制器委托。
您需要确保您没有在您的DataModel中创建tableViewController的另一个对象,并且使用您在AppDelegate中创建的相同对象,因为这是用来触发您的handleFirstTime()函数的对象。
因此,您的表控制器正在监视对象2,而在您的handleFirstTime()中,正在调用对象1上的委托。
另外,如果您要从许多地方访问这个对象,您也可以尝试使用单例DataModel。
https://stackoverflow.com/questions/33008470
复制相似问题