gpt4 book ai didi

ios - Firebase Codelabs FriendlyChat 教程中的图片上传崩溃

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:00 26 4
gpt4 key购买 nike

运行涵盖 FriendlyChat 的 Codelabs Firebase 教程。解决了持续存在的问题(在别处回答)但是当我去上传选定的图像时,我的应用程序崩溃了。我重新执行了所有步骤并测试了教程源代码的“完整”版本,以确保这不是我在做的事情。没运气。还有其他人看到这个问题吗?

这里是异常(exception)...

2016-05-23 17:25:13.119 FriendlyChatSwift[61549:15581893] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效。行数更新后现有部分中包含的行数 (1) 必须等于更新前该部分中包含的行数 (6),加上或减去从该部分插入或删除的行数(插入 1,删除 0)加上或减去移入或移出该部分的行数(0 移入,0 移出)。'

当我检查初始加载时的消息数时,没问题。当我转到 imagePicker 并返回时,突然消息计数为 1,但行数仍然为 6。

问题似乎出在这里:

override func viewWillAppear(animated: Bool) {
self.messages.removeAll()
// Listen for new messages in the Firebase database
_refHandle = self.ref.child("messages").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
self.messages.append(snapshot)
self.clientTable.insertRowsAtIndexPaths([NSIndexPath(forRow: self.messages.count-1, inSection: 0)], withRowAnimation: .Automatic)

})
}

如果您删除所有消息,则在调用 insertRowsAtIndexPaths 时索引将关闭。

最佳答案

我通过将所有代码从 viewWillAppear 移动到 viewDidLoad 的末尾来实现它。因为每次 View 再次显示时都会调用 viewWillAppear,所以它最终会在您离开照片 View 并返回到 TableView 后被调用。另一方面,viewDidLoad 仅在 View 加载开始时调用一次。当用户返回主屏幕并返回应用程序时,它也会起作用。

找出真正的解决方案。关于这个的讨论twitter thread解释你必须做什么以及为什么。 firebase 提供的代码应该像他们一样进入 viewDidAppear。但是,您需要在删除所有消息后重新加载表格。

self.messages.removeAll()
self.clientTable.reloadData()

然后您的 viewWillDisappear 需要正确移除观察者,如上文 Ibrahim Ulukaya 所述。

self.ref.child("messages").removeObserverWithHandle(_refHandle)

它应该在 viewDidAppear 中的原因是当 View 返回顶部时您可以重新开始观察表格。并且需要在 viewWillDisappear 中删除观察者,这样当观察者/通知不在屏幕上时,您就没有 View 响应观察者/通知,因为这违反了 MVC 规则。

希望这对您有所帮助。我为此苦苦挣扎了一段时间。不知道 Firebase 团队怎么没发现这一点。

关于ios - Firebase Codelabs FriendlyChat 教程中的图片上传崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400316/

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