UIViewController 委托或 DataModel Class?

UIViewController Delegate of DataModel Class?

我想要一个 UIViewController 作为 DataModel 的委托。

在我的数据模型中,当我实例化它时,从 parse 中延迟加载数据,这基本上发生在应用程序委托的 applicationDidBecomeActive(application: UIApplication) 函数中,在我的数据模型中,我通过 [=15 获取 Parse 对象=] 功能。

我希望在成功块中调用委托。 我想知道是否可以制作数据模型的 UIViewController 委托?如果是,有任何例子。

这就是我目前正在做的事情 -

在应用程序委托中 -

class AppDelegate: UIResponder, UIApplicationDelegate {
let dataModel = DataModel()
func applicationDidBecomeActive(application: UIApplication) {
    dataModel.handleFirstTime()
    }
}

在数据模型中 Class -

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
}

好吧,你的代码乍一看没问题。但是这里的问题是您将视图控制器委托设置在 DataModel.

的不同对象上

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

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

附带说明一下,如果您从多个地方访问此对象,也可以尝试使用单例 DataModel