问题描述
我有两个问题。
我想传递数据。我有两个ViewControllers
。
控制器 A 有数据,我想将它从 A 传递给 B 控制器。
首先 - 标签栏控制器有一个关系转场。我可以用这个吗?例如:执行转场还是准备?
第二 - 我想在 ViewControllers
中的 UITabBarController
之间传递数据
我不能这样做。我搜索了这个我找不到这个...
解决方法
-
没有。一段关系并不是真正的转场。仅通过切换选项卡不会触发任何 segue。
-
你只需要把数据放在各种视图控制器可以找到的地方。如果您想通知其他视图控制器数据已更改,请使用通知或利用标签栏控制器委托知道用户何时切换标签栏项目这一事实。
不,如果两个 ViewController 连接到 TabbArController,则不能直接在它们之间传递数据。
如果你想你可以通过NotificationCenter进行管理(所以当有新的变化发生并且你发布通知时,它会自动刷新数据)
NotificationCenter.default.addObserver(
self,selector: #selector(self.getData),name: .refreshAttendanceForSelectedDate,object: nil)
@objc func getData() {
/// perform task in view controller
}
// 在收到回复时发布更改....
NotificationCenter.default.post(name: Constants.Notification.refreshAttendanceForSelectedDate,object: nil)
或者 您可以通过创建单例对象将 DataStorgae 更新的数据传递到相应模型类型 (LocalCache) 的变量中。此变量将驻留在内存中,直到应用驻留在内存中。强制杀死应用程序或从内存中刷新应用程序后,此变量将自动删除。
注意:如果需要,请不要忘记设置值 nil。 (例如,注销操作)
class DataStorage {
/// Created the singleton objectbas
static let instance = DataStorage()
/// Created the properties
var notificationbadgeCount: Int?
var configData: ConfigurationModel?
}
按集合使用
DataStorage.instance.selectedStaffId = model.id
获取价值
if let id = DataStorage.instance.selectedStaffId {
/// Perform respective task ....
}