gpt4 book ai didi

ios - 如何正确地将信息从 TableView 转移到 ViewController

转载 作者:行者123 更新时间:2023-11-30 12:59:32 24 4
gpt4 key购买 nike

我正在尝试通过 Segue 将一些信息从 TableView 传递到 ViewController。

通过调试,我可以看到 ViewController 在 TableView 中设置变量之前读取该变量。这会产生 nil 值(它是可选的),而不是我所期望的值,但如果我返回 tableView 并再次选择该值,它将正确设置自身。

我是否需要以某种方式减慢 viewDidLoad() 中的读取速度,或者我是否遗漏了从 tableView 中进行连接的一些基本部分?我很好奇为什么第一次该值为零,但第二次却有效。

TableView 的转场:

// MARK: - Send information to the FBOSelector
// Send the fieldName the user selects
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

let destination = segue.destinationViewController as! FBOSelectorViewController

let path = tableView.indexPathForSelectedRow
destination.fieldName = self.locations[(path?.row)!]

self.fetchFbos(self.locations[(path?.row)!])

}

在 TableView 中设置我将拉入 viewController 的值:

// This is failing because the values are read in FBOSelector before they are set here
// Using the fieldname selected pass the rest of the information to FBOSelector
func fetchFbos(fieldName: String) {
let ref = FIRDatabase.database().reference().child("Airport/\(fieldName)/FBOs/Signature")

ref.observeEventType(.Value, withBlock: { (snapshot) in
// print(snapshot)
if let dictionary = snapshot.value as? [String: AnyObject] {
RegistrationsManager.sharedManager.activeReservation.firfullName = dictionary["fullname"] as? String
// This will fire after the value in FBOSelector is read
print("DELAYED SETTER")
print(RegistrationsManager.sharedManager.activeReservation.firfullName)
}
})
}

在 TableView 中,我使用在 TableView 中设置的值设置一些标签,但它们返回 nil (第一次,如果我返回并再次选择它们,它们会正确显示)

func firebaseInfo() {
self.fieldNameLabel.text = fieldName
self.locationLabel.text = RegistrationsManager.sharedManager.activeReservation.firfullName
//*** BUG IS HERE ***
// On first click locationLabel is nil
// print("DEBUG INFO")
print(RegistrationsManager.sharedManager.activeReservation.firfullName)
}

然后我在 viewDidLoad 中运行它:

override func viewDidLoad() {
super.viewDidLoad()

fboCollectionView.delegate = self
fboCollectionView.dataSource = self
fboCollectionView.pagingEnabled = true

firebaseInfo()
}

对我来说似乎是速度问题/并发问题?我尝试使用 viewWillAppear (相同问题)并使用 sleep() 获取 ViewController 中的值(不好,因为它会停止所有处理)。有人可以指出我解决问题的正确方向吗?

最佳答案

这是我实现传递数据的方法。

TableView Controller

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let selectedIndexPath:NSIndexPath = self.tableView.indexPathForSelectedRow!
let genVC:genViewController = segue.destinationViewController as! genViewController
genVC.selectedItem = myData[selectedIndexPath.row]

}

GenView Controller

var selectedItem: NSManagedObject?
override func viewDidLoad() {
super.viewDidLoad()
fetchData()
}

fetchData() 是根据发送的索引从数据库中提取数据的代码。

关于ios - 如何正确地将信息从 TableView 转移到 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40004994/

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