2017-07-17 53 views
1

我需要处理“权限被拒绝”错误不同于所有其他错误。如何处理iOS中的Firebase数据库错误? #AskFirebase

在Android中我已经做到了:(科特林)

override fun onCancelled(error: DatabaseError) { 
    if (error.code == DatabaseError.PERMISSION_DENIED) { 
     // Warn user 
    } 
} 

在iOS系统中,我只有:

someDbReference.observe(.childAdded, with: { data in 
    // Do something 
}, withCancel: { err in 
    // err is Error 
    print((err as NSError).code) // 1 
    // Which error? O_o 
}) 

如何确定错误类型?我读过整个文档,我认为err.localizedDescription == "Permission Denied"是一个非常糟糕的方法。

+0

我想你可以看看'error.code'对于那个特定的错误是否是唯一的。然后检查是否存在特定代码 – kathayatnk

+0

@kathayatnk“错误类型的值没有成员'代码'” –

+0

嗯......你确定'err'是'NSError'而不是'Error'? – paper1111

回答

-1

就像它已经在评论中提到的一样,我使用相同的方法来确定Firebase返回的错误类型。例如:

someDbReference.observe(.childAdded, with: { data in 
     // Do something 
    }, withCancel: { (returnedError: Error) in 
     // Casting Error to NSError 
     let testError: NSError = searchError as NSError 

     // This is just random error from FB documentation, you can find all there 
     if testError.code == FIRAuthErrorCode.errorCodeUserDisabled.rawValue { 
      // User disabled 
     } 
     }) 

确保将类型为Error的返回错误对象转换为NSError。使用其错误代码将其与Firebase错误代码进行比较。

+0

在'FIRAuthErrorCode'中,所有的代码都以'17000'开始,但是我接收到代码'1',这将无法工作。但它看起来像Firebase的bug,因为我应该接收代码'-3'来拒绝权限 –

+0

哦,你是对的。它下滑了我的想法 - 我正在处理自定义错误类的错误,因为我在应用程序中使用了几种语言,并且需要进行本地化。所以这个错误是在'default switch case'下面并且被用作一般的错误信息。 将继续访问您的文章,以防万一您发现任何新的东西,希望您找出一些东西。 – ZassX

+0

我希望来自#askfirebase或者@FrankvanPuffelen的人会回答=) –