当我尝试将Parse objectId保存为User类的指针值时出现以下错误:Can't use nil for keys or values on PFObject. Use NSNull for values.
我有一个显示头像列表的UICollectionView(Parse中的头像类)。当用户在列表中选择头像时,我想使用指针值将该用户的头像设置为所选图像。
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
print(self.avatars[indexPath.row])
self.user["avatar"] = self.avatars[indexPath.row]["objectId"]
self.performSegueWithIdentifier("returnToProfile", sender: user)
}
}
用户具有指向Avatar类的指针列。试图让Avatar objectId放入User表的列中,但我不断收到错误。奇怪的是print(self.avatars[indexPath.row])
返回以下内容:
<Avatar: 0x7f8ebb835c80, objectId: WG7L0KpdJ2, localId: (null)> {
file = "<PFFile: 0x7f8ebb837dc0>";
name = man;
}
objectId存在,但是如果我尝试使用print(self.avatars[indexPath.row]["objectId")
进行打印,我会得到nil。
我做错了什么?
谢谢!
编辑:更新的代码:
let user = PFUser.currentUser()
user!["avatar"] = self.avatars[indexPath.row].objectId
do {
print(self.avatars[indexPath.row].objectId)
try user?.save()
} catch {
print(error)
}
print语句打印正确的objectId。但是,将其保存给用户会导致错误invalid type for key avatar, expected *Avatar, but got string" UserInfo={code=111, temporary=0, error
编辑2:指针不保存objectId。您必须保存整个对象。刚想通了。这是现在有效的更新代码。感谢大家的帮助!!
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
self.user["avatar"] = self.avatars[indexPath.row]
do {
try self.user.save()
} catch {
print(error)
}
self.performSegueWithIdentifier("returnToProfile", sender: user)
}
}
答案 0 :(得分:1)
要访问ID:self.user["avatar"] = self.avatars[indexPath.row].objectId
在这种情况下,objectId
是对象的属性,而不是其中一个字典的下标值。