首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地将信息从TableView分割到ViewController

如何正确地将信息从TableView分割到ViewController
EN

Stack Overflow用户
提问于 2016-10-13 01:39:49
回答 2查看 81关注 0票数 0

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

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

我是需要以某种方式减慢viewDidLoad()中的读取速度,还是从tableView中遗漏了一些基本的segueing部分?我最好奇的是为什么第一次的值是零,而第二次的值是有效的。

TableView中的段:

代码语言:javascript
复制
// 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)!])

}

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

代码语言:javascript
复制
// 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 (第一次,如果我返回并再次选择它们,它们将正确显示)

代码语言:javascript
复制
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中运行它:

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

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

    firebaseInfo()
}

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

EN

回答 2

Stack Overflow用户

发布于 2016-10-13 01:59:54

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

TableViewController

代码语言:javascript
复制
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]

}

GenViewController

代码语言:javascript
复制
var selectedItem: NSManagedObject?
override func viewDidLoad() {
   super.viewDidLoad()
   fetchData()
}

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

票数 0
EN

Stack Overflow用户

发布于 2016-10-13 02:13:57

嘿,所以我会尝试在didSelectCellAtIndexPath中调用fetchFbos(indexPath: indexPath),并从prepareForSegue中删除self.fetchFbos(_:)

下面的fetchFbos(indexPath: IndexPath)将在从firebase获得新值后执行分段。

代码语言:javascript
复制
func fetchFbos(indexPath: IndexPath) {
 let fieldName = self.locations[indexPath.row]
 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")
        self.performSegue(identifier: segueId, 
       sender: self)
        print(RegistrationsManager.sharedManager.activeReservation.firfullName)
    }
})
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40004994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档