我正在使用 XLPagerTabStrip - https://github.com/xmartlabs/XLPagerTabStrip有两个共享相同数据集的选项卡。
对于数据集,在我的主视图(包含两个选项卡)中,我调用了 Firebase 来获取数据。收到后,我会拨打通知电话以发布数据 - > NB 我确信这不是最优雅的方式,所以如果有人对更好的方式有建议,请告诉我(尽管这本身就是一个单独的问题)。
无论如何 - 在这两个选项卡中,我都有此通知的观察者。
这在初始选项卡上效果很好,但是在用户点击选项卡之前第二个选项卡似乎没有初始化 - >出于内存原因是有意义的:)但这意味着 MainVC 中的帖子被错过了......
如何让两个选项卡基本上使用 Firebase 调用中的相同数据集?
我的高级代码如下(如果需要,我可以添加更多细节,让我知道缺少什么):
class MainVC: ButtonBarPagerTabStripViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
getData()
}
fileprivate func getData() {
// ... bunch of firebase stuff...
NotificationCenter.default.post(
name: NSNotification.Name(rawValue: "dataReceived"),
object: nil,
userInfo: ["data": data]
)
}
override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
let tab_one = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "tab_one")
let tab_two = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "tab_two")
return [tab_one, tab_two]
}
}
class TabOneVC: UIViewController, IndicatorInfoProvider {
override func viewDidLoad() {
super.viewDidLoad()
print("Hello from Tab One")
NotificationCenter.default.addObserver(
self,
selector: #selector(dataReceivedHandler(notfication:)),
name: NSNotification.Name(rawValue: "dataReceived"),
object: nil
)
}
@objc func dataReceivedHandler(notfication: NSNotification) {
// ... process data received
}
}
class TabTwoVC: UIViewController, IndicatorInfoProvider {
override func viewDidLoad() {
super.viewDidLoad()
print("Hello from Tab Two")
... same notification code as per Tab One
}
}
我想可能需要Core Data,但如果它是唯一的方式(没有可怕的黑客攻击),我只会沿着这条路走
提前致谢!