2017-07-17 75 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的人會回答=) –