- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始使用 Firebase 与 Swift 合作,并有一个示例消息节点。我添加了包含文本和用户名等的消息子项。我设置了安全规则,以便对每个 .write 和 .read 进行身份验证。我创建了一个观察者来观察这一点,它正在触发,但它返回的快照为空。我需要快照数据的原因是这样我可以从客户端删除该确切消息。
数据节点结构:
{
"messages" : {
"-KcM3SlAQXfjCz01waXF" : {
"name" : "mgardner1994",
"text" : "test23"
},
"-KcM3UKA_U7n2YwhlFeB" : {
"name" : "mgardner1994",
"text" : "test4"
},
"-KcMB_8Ec74HIQGL9adt" : {
"name" : "mitchell_maler",
"text" : "test5"
},
"-KcOC08kLUO-cEWLeICG" : {
"name" : "mitchell_maler",
"text" : "hello"
},
"-KcOC6ZWT6gyVi6pxGF8" : {
"name" : "mitchell_maler",
"text" : "test"
}
}
}
规则:
{
"rules": {
"messages": {
".read": "auth != null",
".write": "auth != null"
}
}
}
Swift 代码:
_refHandleDel = ref.child("messages").observe(.childRemoved, with: { (snapshot) -> Void in
// TODO: Why is snapshot returning nil
let index = self.messages.index(of: snapshot)
self.messages.remove(at: index!)
self.messagesTable.deleteRows(at: [IndexPath(row: index! , section: 0)], with: .automatic)
})
编辑:向文本而不是图像添加数据结构。
最佳答案
您可能想用另一种方式来解决这个问题:
每个快照(或子快照)都有一个键,这就是您应该在数组(表、数据源等)中查找的键
换句话说,当消息最初加载时(例如加载到数据源中),它们将位于键:值对中
messages
-KcM3SlAQXfjCz01waXF (the key)
name : "mgardner1994", (the values which are a dictionary)
text : "test23"
理想情况下,您最终会得到这些键值对的数组
a[0] = key:value = -KcM3SlAQXfjCz01waXF: dictionary of children
a[1] = key:value = -KcM3UKA_U7n2YwhlFeB: dictionary of children
注意上面是字典,但它可以是 UserClass 或 ItemsClass
a[0] = aUser (UserClass)
a[1] = aUser (UserClass)
当您的应用程序收到删除事件时,它将传递键:值对作为快照。我们不关心值,但我们关心键,因为您可以在数组中找到该项目的索引并将其删除。 (通过 ObjC NSPredicate 来查找匹配项)或者...如果您使用的是 UserClass,则在 Swift 中类似这样
func handleChildRemoved(_ snapshot: FDataSnapshot! ) {
let key = snapshot.key
if let index = self.usersArray.indexOf({$0.firebaseKey == key}) {
self.usersArray.removeAtIndex(index)
self.usersTableView.reloadData()
}
}
在这个例子中,我有 UserClass
class UserClass {
firebaseKey = ""
userName = ""
}
关于ios - Firebase ios 快照为 .childRemoved 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100525/
我刚刚开始使用 Firebase 与 Swift 合作,并有一个示例消息节点。我添加了包含文本和用户名等的消息子项。我设置了安全规则,以便对每个 .write 和 .read 进行身份验证。我创建了一
我是 Swift 的新手 - 请怜悯 - 使用我的代码,我无法从外部 Firebase 服务器中删除 .childRemoved,因为预期的是 Int 而不是 String 并且无法弄清楚如何从我的
我希望在子项更改为 nil 时调用 FIRDataEventTypeChildChanged 而不是 ChildRemoved 。我只希望在被观察的根对象被删除(设置为 nil)时调用 ChildRe
我很难用语言表达。有人可以解释不同的 FIRDataEventType 之间的区别以及何时使用它的示例吗? 示例 (SWIFT): let queryRef = FIRDatabase.databas
我是一名优秀的程序员,十分优秀!