我昨天升级了Firebase,现在遇到了一个非常不寻常的问题。当我运行模拟器时,我得到一个快速的编译错误“Segmentation fault:11”这几行代码描述了错误,但它们绝对没有帮助。从错误中,我看到的唯一可能是提供线索的是底部。它说:
1. While loading members for 'ProfileTableViewController' at <invalid loc>
2. While deserializing decl #101 (PATTERN_BINDING_DECL)
3. While deserializing decl #2 (VAR_DECL)
奇怪的是,我上面输入的错误并不一致。提到的视图控制器在我使用Firebase的三个视图控制器之间旋转。
为了尝试解决这个问题,我注释掉了ProfileTableViewController类中的所有代码,但是我仍然在引用该视图控制器时出错。视图控制器中运行的唯一代码是:
import UIKit
import Firebase
import FirebaseDatabase
(我也在其他视图控制器中使用FirebaseAuth。)
解决问题的方法是点击“清理”,重新启动xcode,在启动时再次清理,然后运行程序。除非我对程序中的代码进行任何更改,否则一切都会正常工作。即使我所做的只是添加注释,错误也会重新出现。
我不想每次写几行代码时关闭xcode并重新启动,我担心上传到app store时会遇到问题。
我正在使用XCode 7.3.1,我的部署目标是9.3
非常感谢您给予的任何见解!谢谢!
答案 0 :(得分:20)
我能够弄明白!我的可可豆荚不是最新的。我一回去并在终端中安装了最新的Cocoa Pod,然后更新了这个应用程序的podfile,这个错误就消失了。
过程:
打开终端
sudo gem install cocoapods
(Cocoapods update)在终端导航到app文件夹,然后:
open -a xcode podfile
如果需要,请在podfile中进行更改。我不需要做任何改变。保存并退出。
在终端
pod update
打开.xcworkspace文件并打开!
答案 1 :(得分:4)
我也在这个问题上拔了一段时间。 我试过Eric Duffett的答案,但没有运气。
我发现这是 FirebaseAuth 的问题。我做的是这个:
希望这会对某人有所帮助。
答案 2 :(得分:3)
这真的让我疯狂。
此代码导致上述崩溃:
func ref() -> FIRStorageReference {
return FIRStorage.storage().reference()
}
如果我只是在一个函数中使用它,一切正常:
FIRStorage.storage().reference().dataWithMaxSize(...
花了好几个小时来解决这个问题。错误消息指向其他位置。这可能是我整个职业生涯中最令人沮丧的调试经历。
答案 3 :(得分:3)
在您的podfile中,您可以尝试取消注释use_frameworks!
use_frameworks!
pod 'Firebase'
pod 'Firebase/Database'
pod 'Firebase/Auth'
然后运行“pod update&#39;在终端。重启你的Xcode项目。
在使用Segmentation fault 11进行了两天的挣扎之后,这对我来说是这样的。
答案 4 :(得分:1)
删除DerivedData
和ModuleCache
,然后Clean>Build
为我工作。
答案 5 :(得分:1)
我也遇到过Firebase这个问题。
Xcode会抱怨特定的课程。就像你的&#34; ProfileTableViewController&#34; 我做的是解决这个问题: 评论该类中所有与Firebase相关的导入 - &gt;清洁 - &gt;构建(显然有一些错误) - &gt;取消注释 - &gt;清洁 - &gt;建立成功
答案 6 :(得分:0)
我想出了一个适合我的不同解决方案。我有一些自定义函数可以将像FIRUser
这样的Firebase特定变量返回到顶部没有import Firebase
或import FirebaseAuth
的文件。我喜欢将我的数据服务方法保存在一个单独的文件中,所以我只是更改了函数,以便它们返回Strings
,例如FIRUser.uid
。这最终摆脱了编译器警告/崩溃的好处。
答案 7 :(得分:0)
当我明确设置setValue
的完成块参数类型时,我遇到了问题。
FIRDatabase.database().reference(withPath: "test").childByAutoId().setValue("test1") { (error: Error?, ref: FIRDatabaseReference) in }
删除error
和ref
的类型后,一切正常。