【问题标题】:Can't use nil for keys or values on PFObject. Use NSNull for values不能将 nil 用于 PFObject 上的键或值。对值使用 NSNull
【发布时间】: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


【解决方案1】:

要访问 ID:self.user["avatar"] = self.avatars[indexPath.row].objectId

在这种情况下,objectId 是对象的属性,而不是它的字典下标值之一。

【讨论】:

  • 谢谢!我越来越近了。 self.avatars[indexPath.row].objectId 似乎确实打印了正确的 ID。但是,当我尝试打印它或将其保存给用户时,我收到一个奇怪的错误invalid type for key avatar, expected *Avatar, but got string" UserInfo={code=111, temporary=0, error=
  • 其实print语句好像打印了正确的objectId。问题是当我尝试最终将该 objectId 保存到 User 中的头像指针列时。
  • NVM,你必须保存整个对象,而不仅仅是objectId
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多