gpt4 book ai didi

swift - 更新 Firebase 时由于未捕获的异常 'NSUnknownKeyException' 而终止应用程序

转载 作者:行者123 更新时间:2023-11-28 07:24:40 24 4
gpt4 key购买 nike

在 Firebase 中创建一个添加键值对的函数时,我遇到了以下报告的崩溃

* Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key score.' * First throw call stack: (0x1dbd9a3a8 0x1daf9fd00 0x1dbcb36c8 0x1dc796054 0x1dc7ed2a0 0x1dc7070e0 0x102e58cc8 0x102e50640 0x102e4ed18 0x102e4f2c8 0x103f24214 0x103f13f84 0x1daf9b760 0x20906dbf0 0x208af1f94 0x208af22c8 0x208af12dc 0x2090a6a90 0x2090a7cc8 0x209086f50 0x209152150 0x20915490c 0x209154c7c 0x20914d9c4 0x1dbd2a444 0x1dbd2a3c0 0x1dbd29c7c 0x1dbd24950 0x1dbd24254 0x1ddf63d8c 0x20906c4c0 0x102f2befc 0x1db7e0fd8) libc++abi.dylib: terminating with uncaught exception of type NSException Message from debugger: failed to send the k packet

我的数据库布局是这样的:enter image description here我相信问题是我在我的函数中将它调用到错误的路径。

我更新“分数”的功能是:

func updateRecentScore(chatRoomId: String, score: Int) {

let date = dateFormatter().string(from: Date())

firebase.child(kRECENT).queryOrdered(byChild: kCHATROOMID).queryEqual(toValue: chatRoomId).observeSingleEvent(of: .value) { (snapshot) in

if snapshot.exists() {
for recent in ((snapshot.value as! NSDictionary).allValues as Array) {
updateRecentScoreItem(recent: recent as! NSDictionary, score: score)
}
}

}



}

func updateRecentScoreItem(recent: NSDictionary, score: Int) {

var score = recent[kSCORE] as! Int

let values = [kSCORE: score] as [String: Any]

firebase.child(kRECENT).child((recent[kRECENTID] as? String)!).updateChildValues(values as [NSObject : AnyObject]) {
(error, ref) -> Void in

if error != nil {
ProgressHUD.showError("Couldnt update recent: \(error!.localizedDescription)")
}
}

}

我在这里调用函数来更新它:

let score = recentsRef.child(kRECENTID).value(forKey: kSCORE) as? Int

let newScore = score! + 1

let score1 = firebase.child(kRECENT).queryOrdered(byChild: kCHATROOMID).queryEqual(toValue: chatRoomId).value(forKey: kSCORE) as? Int

let newScore1 = score1! + 1


updateRecentScore(chatRoomId: chatRoomId, score: newScore1)

感谢所有帮助,因为我不确定如何解决此问题,并且我已尝试到处寻找答案。如果您需要任何进一步的信息,请询问。

最佳答案

我想你正在寻找这个:

func updateRecentScore(chatRoomId: String, score: Int) {

let date = dateFormatter().string(from: Date())

firebase.child(kRECENT).queryOrdered(byChild: kCHATROOMID).queryEqual(toValue: chatRoomId).observeSingleEvent(of: .value) { (snapshot) in

if let snapshots = snapshot.children.allObjects as? [DataSnapshot] {
for child in snapshots {
child.ref.child(kSCORE).setValue(score+1)
}
}
}
}

主要区别:

  • 我使用内置的 children 属性遍历子节点,这意味着我得到了一个 Snapshot,这让我可以简单地查找 ref 每个 child 。
  • 我直接在分数属性上调用 setValue(),因为您只是在更新该属性。使用 updateChildValues 实际上只有在您想一次更新多个但不是所有属性时才有用。

关于swift - 更新 Firebase 时由于未捕获的异常 'NSUnknownKeyException' 而终止应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56926877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com