我尝试将2个对象添加到字典中,然后将其发送到Post类以获取照片Feed。这就是我所拥有的,我正在使用firebase。
if let postDict = snap.value as? Dictionary<String, AnyObject> {
for(name, value) in postDict {
if name == "postedBy" {
DataService.ds.REF_USERS.child(value as! String).observeSingleEventOfType(.Value, withBlock: { (friendDictionary) in
let userDict = friendDictionary.value as! NSDictionary
value.setValue(userDict.objectForKey("username"), forKey: "username")
value.setValue(userDict.objectForKey("profileThumbUrl"), forKey: "profileThumbUrl")
self.collectionView?.reloadData()
})
}
}
let key = snap.key
let post = Post(postKey: key, dictionary: postDict)
self.posts.append(post)
这个问题是,当我尝试使用setValue()将用户名和profileThumbUrl添加到postDict中的值时,我收到错误:&#34;此类与密钥用户名不符合密钥值编码。& #34;我在其他情况下使用过这种方法,所以我不知道是不是因为我正在使用&#34;如果让&#34;一开始因为我通常不会使用它。有什么想法吗?
答案 0 :(得分:1)
objectForKey返回一个可选类型,该类型不符合NSDictionary,因此您需要打开可选项以使其生效。
例如
for(name, value) in postDict {
if name == "postedBy" {
DataService.ds.REF_USERS.child(value as! String).observeSingleEventOfType(.Value, withBlock: { (friendDictionary) in
let userDict = friendDictionary.value as! NSDictionary
guard let username = userDict.objectForKey("username") else { continue }
guard let profileThumbURL = userDict.objectForKey("profileThumbUrl") else { continue }
value.setValue(username, forKey: "username")
value.setValue(profileThumbUrl, forKey: "profileThumbUrl")
self.collectionView?.reloadData()
})
}
}