Ios Firebase Codelabs FriendlyChat教程中的图像上载崩溃

Ios Firebase Codelabs FriendlyChat教程中的图像上载崩溃,ios,swift,firebase,Ios,Swift,Firebase,运行codelabs Firebase教程,介绍FriendlyChat。解决了经常出现的问题(在别处回答),但当我上传所选图像时,我的应用程序崩溃了。我重新编写了所有步骤,并测试了教程源代码的“完整”版本,以确保它不是我正在做的事情。不走运。还有人看到这个问题吗 这是个例外 2016-05-23 17:25:13.119 FriendlyChatSwift[61549:15581893]***由于未捕获异常“NSInternalinconsistenceException”而终止应用程序,原因

运行codelabs Firebase教程,介绍FriendlyChat。解决了经常出现的问题(在别处回答),但当我上传所选图像时,我的应用程序崩溃了。我重新编写了所有步骤,并测试了教程源代码的“完整”版本,以确保它不是我正在做的事情。不走运。还有人看到这个问题吗

这是个例外

2016-05-23 17:25:13.119 FriendlyChatSwift[61549:15581893]***由于未捕获异常“NSInternalinconsistenceException”而终止应用程序,原因:“无效更新:第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时索引将关闭。

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

找到了真正的解决办法。关于这一点的讨论解释了你必须做什么以及为什么。firebase提供的代码应该在ViewDidDisplay中显示,正如他们所做的那样。但是,您需要在删除所有消息后重新加载表

self.messages.removeAll()
self.clientTable.reloadData()
然后,您的视图将消失,需要正确删除观察者,如上面Ibrahim Ulukaya所述

self.ref.child("messages").removeObserverWithHandle(_refHandle)
它应该出现在ViewDidDisplay中的原因是,当视图返回顶部时,您可以重新开始观察表。并且需要在ViewWillEnglish中删除观察者,这样当观察者/通知不在屏幕上时,您就不会有一个视图响应该观察者/通知,因为这违反了MVC规则


希望这有帮助。我为此挣扎了一段时间。不确定Firebase团队是如何发现这一点的。

主要错误是在VIEWWILLENGINE中删除了错误引用中的观察者。 应该是

self.ref.child("messages").removeObserverWithHandle(_refHandle)
相反。此外,您还希望在移除后重新加载数据。视图中的所有内容都将出现

如果将对象移动到viewDidLoad和deAlloc,则无需每次都移除对象和重新加载数据


(我将很快更新源代码。)

您介意上传引发的异常或错误消息吗,这样我们就可以处理一些问题了?抱歉,Mike。添加了异常。。。