我的应用程序有这个结构:
我有一个存储多个 Patient()的Realm DB。
TabViewController : SearchViewController 和 DetailViewController
在 SearchViewController 中有一个 TableView 。
我可以在TableView 中选择多个患者 - 患者() - 并将其存储在此变量内的同一个SearchViewController 中:var chosenPatient = ChosenPatient()
< / p>
ChosenPatient类来自ModelController:
class ChosenPatient: NSObject {
var data = Patient()
{ ... multiple functions ... }
}
我在SearchViewController的updateLabels()中需要的只是访问:
label.stringValue = chosenPatient.data.name/lastName/age etc
但是我想在我的DetailsViewController中做同样的事情。我只想要一个函数updateLabels()来检索我在SearchViewController中选择的 SAME 患者,并访问患者拥有的所有信息。
我已经阅读过有关NSNotifications,Delegates和Segues的内容,但我找不到可以适应我的应用方案的良好解释方法。
我希望拥有一个具有唯一Patient()的GLOBAL变量,并以简单明了的方式从任何ViewController访问patient.data。
问候:)
[使用XCODE 8.3,swift 3.2,适用于macOS的应用程序]
答案 0 :(得分:0)
如果它是一对一的关系,我通常会使用协议委托模式。除非绝对必要,否则你不想保留任何全局变量。
为您的UITabBarController
制作自定义课程,并将SearchViewController
分配给DetailViewController
数据源。
protocol ChosenPatientDataSource: class {
var chosenPatient: ChoosenPatient { get }
}
class SearchViewController: UITableViewController, ChosenPatientDataSource {
var chosenPatient = ChosenPatient()
}
class DetailViewController: UIViewController {
weak var dataSource: ChosenPatientDataSource?
func useChosenPatient() {
let chosenPatient = dataSource?.chosenPatient
...
}
}
希望能得到一些帮助!
答案 1 :(得分:0)
要在不同标签中的观看次数之间传递信息,例如SearchViewController
和DetailViewController
,我会使用NSNotification
。
我强烈反对用大量通知填充你的应用程序的诱惑,因为它很快就会让代码很难理解。