2016-07-19 22 views
9

Tôi đang cố gắng xóa dữ liệu từ nhiều vị trí trong cơ sở dữ liệu Firebase cùng một lúc.Sử dụng UpdateChildValues ​​để xóa khỏi Firebase

Các Firebase docs nhà nước:

"The simplest way to delete data is to call removeValue on a reference to the location of that data. You can also delete by specifying nil as the value for another write operation such as setValue or updateChildValues. You can use this technique with updateChildValues to delete multiple children in a single API call."

Mã của tôi là

let childUpdates = [path1 : nil, 
        path2 : nil, 
        path3 : nil, 
        path4 : nil] 

    ref.updateChildValues(childUpdates) 

Tất cả bốn con đường là chuỗi, nhưng tôi nhận được một lỗi:

"Type of expression is ambiguous without more context."

Tôi giả định này xảy ra vì giá trị nil, vì nếu tôi thay thế nil bằng bất kỳ thứ gì khác (chẳng hạn như Int) thì lỗi sẽ biến mất.

Cách chính xác để sử dụng updateChildValues ​​để xóa dữ liệu khỏi Firebase là gì? Chúng tôi muốn nó hoạt động theo cách tương tự với hàm removeValue() trong Firebase. Lý do chúng tôi muốn làm điều này là vì nó có thể xóa khỏi nhiều địa điểm trong một cuộc gọi.

Trả lời

40

Vì vậy, vấn đề ở đây là

ref.updateChildValues(childUpdates) 

đòi hỏi một [String:! AnyObject] tham số để updateChildValues, và AnyObject! không thể là một con số không (ví dụ: bạn không thể sử dụng AnyObject? mà là một tùy chọn có thể là con số không)

Tuy nhiên, bạn có thể làm điều này

let childUpdates = [path1 : NSNull(), 
        path2 : NSNull(), 
        path3 : NSNull(), 
        path4 : NSNull()] 

Vì AnyObject! bây giờ là một đối tượng NSNull() (không phải nil), và Firebase biết rằng NSNull là một giá trị nil.

+0

bạn lưu lại ngày của tôi –

+1

Cảm ơn rất nhiều! Điều này chắc chắn cần phải có trong tài liệu Firebase, rất bực bội! – Crashalot

1

Tôi nghĩ rằng lỗi này đến từ dòng đầu tiên bạn đã cung cấp. Bạn cần chỉ định loại từ điển. Vì vậy, thay đổi nó để

let childUpdates: [String : AnyObject?] = [path1: nil, path2: nil,...] 
+0

Rất tiếc, nó không hoạt động. Loại dự kiến ​​cho từ điển là [NSObject: AnyObject]. Nếu từ điển không phải là loại đó, hàm updateChildValues ​​sẽ đưa ra một lỗi. Chúng tôi đã thử thay đổi đường dẫn đến NSObjects, nhưng nó vẫn phàn nàn với giá trị nil trên AnyObject ?. Có vẻ như chúng ta không thể đặt giá trị nil vào, nhưng họ nói trong tài liệu của họ rằng chúng ta có thể có một cách mà chúng ta chưa biết. –

+0

Tôi nghĩ nếu bạn sử dụng chuỗi rỗng '" "' Firebase sẽ xóa nó. hãy thử điều đó. – rigdonmr

+1

Nó chỉ thay đổi giá trị tại đường dẫn đến một chuỗi rỗng –

Các vấn đề liên quan