UIViewController DataModel类的代理?

时间:2015-10-08 06:46:29

标签: ios uitableview swift2 uiapplicationdelegate

我希望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)
        }
    })
}
}

1 个答案:

答案 0 :(得分:1)

嗯,你的代码一见钟情就好了。但问题是你在DataModel的另一个对象上设置视图控制器委托。

您需要确保不在DataModel中创建tableViewController的另一个对象,并使用您在AppDelegate中创建的同一对象,因为这是您用来触发的对象你的handleFirstTime()功能。

因此,您的表控制器正在监视对象2,而在handleFirstTime()中,正在调用对象1上的委托。

作为旁注,如果您从许多地方访问此对象,也可以尝试使用单身DataModel