gpt4 book ai didi

ios - 访问不同 Controller 中的功能并初始化我的 masterViewController?

转载 作者:行者123 更新时间:2023-11-29 01:35:20 26 4
gpt4 key购买 nike

技术:XCode 7.0、Swift 2

在我的 detailViewController 文件中,我有(除其他外):

    var masterViewController: MasterViewController? = nil

@IBAction func saveItem(sender: anyObject) {
if let newItem = something,
let tagItem = newItem
self.masterViewController!.model.saveQuery(newItem, forTag: tagItem, syncToCloud: true)
let indexPath =
NSIndexPath(forRow: 0, inSection: 0)
self.masterViewController!.tableView.insertRowsAtIndexPaths([indexPath],
withRowAnimation: .Automatic)
self.masterViewController?.forceSearch(indexPath)
self.masterViewController?.tableView.reloadData()
}

}

所以,我在 self.masterViewController...saveQuery 行遇到了错误的执行错误,我认为这与我的 MasterViewController 已设置有关为 nil。但是,我不确定我应该如何启动我的 MasterViewController 变量或者我应该设置它什么(如果这有意义的话)。

如何正确启动?

最佳答案

缺少很多信息。例如,您是否使用 Storyboard。 Controller 之间的关系是什么:您使用的是导航 Controller 还是以模态方式呈现的细节。

假设 Storyboard中有一个导航 Controller :您的细节 Controller 可以通过多种方式了解主视图 Controller 。如果您确实想像您的示例中那样使用变量,您可以在执行 Storyboard segue 之前设置它。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
guard let detailController = segue.destinationController as? DetailViewController else {
return
}

detailController.masterViewController = self
}

但是一般来说,建立这样的正式关系是不好的做法。在可重用性方面,您现在将细节 Controller 限制为仅由 MasterViewController 呈现。

在这种情况下使用的一种常见模式是委托(delegate)模式。在细节 Controller 上定义委托(delegate)协议(protocol)和委托(delegate)属性。例如,在您的 prepareForSegue 中将细节 Controller 的委托(delegate)设置为主 Controller 。并在主 Controller 的委托(delegate)方法中执行任何操作以重新加载表。

关于ios - 访问不同 Controller 中的功能并初始化我的 masterViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33025141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com