【发布时间】:2016-02-24 20:41:00
【问题描述】:
当我尝试将 Parse objectId 保存为 User 类的指针值时出现以下错误:Can't use nil for keys or values on PFObject. Use NSNull for values.
我有一个 UICollectionView 显示头像列表(Parse 中的头像类)。当用户在列表中选择头像时,我想使用 Pointer 值将该用户的头像设置为所选图像。
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)
}
打印语句打印正确的 objectId。但是,将其保存给用户会导致错误invalid type for key avatar, expected *Avatar, but got string" UserInfo={code=111, temporary=0, error
编辑 2:指针不保存 objectId。 您必须保存整个 OBJECT。刚刚想通了。这是现在可以使用的更新代码。谢谢大家的帮助!!
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)
}
}
【问题讨论】:
-
如果您将
-allKeys发送到头像对象,您是否将“objectId”作为值之一? -
感谢您的回复!我该怎么做呢?
print(self.avatars.allKeys)不起作用 -
这是
PFObject上的一个属性,因此您需要在对象而不是数组上调用它(请参阅docs here)-但现在我更仔细地阅读了文档,它似乎永远不会返回@无论如何,987654333@。很高兴还有一个objectId属性 - 试试let avatar = self.avatars[indexPath.row]然后avatar.objectId -
谢谢!这有帮助,但是当我保存用户时出现错误。更新代码
标签: ios swift parse-platform swift2