gpt4 book ai didi

ios - 在模态视图上使用dismissViewController后,预期的 View 会推送多次

转载 作者:行者123 更新时间:2023-11-30 13:16:48 26 4
gpt4 key购买 nike

这是一个我似乎无法在网上找到任何解决方案的问题。

我有以下 Storyboard:

初始 TableView 中的行有一个推送序列到您可以在其他 View 上方看到的 View 。

现在,当我按下初始 TableView 中的栏按钮时,它会执行模式转场到新的导航 Controller (中间的那个),您可以在其中创建对象。

在最右侧的 selectFriends View 中,当您按完成时,它会运行以下代码:

self.dismissViewController(true, completion: nil)

然后它让我回到初始表格 View 这就是我想要的。

这就是奇怪的地方

如果我从第一个 View 中关闭模态导航 Controller ,它就可以正常工作

但是,当我从 selectFriends View 中关闭模式导航 Controller 时,它会返回到初始表格 View ,

然后连续运行 goToChat Segue 的次数与呈现模态视图之前执行的次数相同。

它甚至不运行 didSelectRowAtIndexPath 代码。

我的猜测是,它与初始导航 Controller 中 View 和转场的某些映射或存储有关。

初始 TableView 的 didSelectRowAtIndexPath 具有以下内容:

    // finds user item to pass to UserProfileView
print("row selected")

if self.resultSearchController.active {

self.selectedItem = self.filteredItemsList[indexPath.row]

} else {

self.selectedItem = self.itemsList[indexPath.row]


}

self.ref.child("users/\(self.currentUser!.uid)").observeEventType(.Value, withBlock: { (snapshot) -> Void in

self.currentUserItem = UserItem(snapshot: snapshot)
self.performSegueWithIdentifier("goToChat", sender: nil)

})


}

如果您有解决方案,请告诉我。

最美好的祝愿,哈立德

最佳答案

这有点尴尬。我实际上正在深入研究 UIKit 代码来查看presentViewController 和performSegueWithIdentifier 函数的代码,希望找到我的答案。

但正如 Matt 在评论中指出的那样,observeEventType 函数看起来确实不合适。仔细一看,我意识到自己的错误。

每次我选择一个表行时,它都会为数据库中的更改注册一个新的事件监听器,因此一旦创建了新项目,它就会按照监听器注册的次数启动内部代码(包括segue) .

我是这样修复的:

// This is a Firebase "user object" that carries the current user's ID

let currentUser = FIRAuth.auth().currentUser

// Now we set the listener in the viewDidLoad to simply update the currentUserItem
and not perform any segue or code that we only need to run once.

override func viewDidLoad() {

self.ref.child("users/\(self.currentUser.uid)").observeEventType(.Value, withBlock: { (snapshot) -> Void in

self.currentUserItem = UserItem(snapshot: snapshot)

})

}

现在,在 didSelectRowAtIndexPath: 方法中,我们仅获取该行的 selectedItem 并运行 segue。一次。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

// finds item in respective row to enter chat
if self.resultSearchController.active {

self.selectedItem = self.filteredItemsList[indexPath.row]

} else {

self.selectedItem = self.ItemsList[indexPath.row]


}

self.performSegueWithIdentifier("goToChat", sender: nil)

}

再次感谢马特!

关于ios - 在模态视图上使用dismissViewController后,预期的 View 会推送多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38136216/

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