2016-09-19 58 views
0

我在使用Swift編寫的iOS應用程序中使用Firebase。SetValue的行爲不如預期

static func createUserRecord(uid: String, user: User){ 
     let userDictionary = user.getJSON() 
     self.usersRef.child(uid).setValue(userDictionary) 
    } 

此代碼是工作得很好之前我釋放我的應用程序和釋放我不能讓用戶記錄添加了應用程序後,該應用程序的所有其它功能工作正常,包括保存和檢索一些數據。任何人都可以在這段代碼中發現錯誤?

即使路徑不在那裏,setValue也可以工作嗎?例如如果路徑a/b/在那裏,我叫a/b/c.child('d').setValue("abcd")。這會工作嗎?

+0

是你的火力地堡安全規則設置爲允許保存這些數據? – chickenparm

+0

調用'setValue()'會創建路徑,如果它還不存在。看起來你的'user.getJSON'更可能包含根據數據庫(或你的安全規則)無效的東西。你需要附上一個完成塊來檢測這個:https://firebase.google.com/docs/reference/ios/firebasedatabase/interface_f_i_r_database_reference.html#a1107cae145ab12e1ef58ab9f8713b84d –

+0

@chickenparm是的,他們都是真正的讀寫,我將圖片上傳到存儲中又遇到了另一個問題(一小時前它工作得很好),這是否會成爲帶寬問題?我應該考慮升級計劃嗎? – iShaalan

回答

2

調用setValue()將創建路徑,如果它還不存在。

看起來你的user.getJSON()包含的東西根據數據庫(或你的安全規則)是無效的。

你會想要attach a completion block來檢測到這一點。

這裏是從StackOverflow的文檔,這樣做的一個例子:

一個常見原因讀操作可能無法正常工作是因爲你的 安全規則拒絕操作,例如因爲你不是 經過身份驗證(默認情況下,數據庫只能由 經過身份驗證的用戶訪問)。

您可以在控制檯輸出中看到這些安全規則違規。但是 很容易忽略這些。你也可以在你自己的代碼 中處理它們,並使它們更加醒目可見,這在開發過程中尤其有用 (因爲你的JSON,規則和代碼經常變化)。

檢測故障閱讀在iOS您必須實現您的觀察者的withCancel 塊:

ref!.child("notAllowed").observe(.value, with: { (snapshot) in 
    print("Got non-existing value: \(snapshot.key)") 
}, withCancel: { (error) in 
    print(error) 
})