gpt4 book ai didi

ios - query.whereKey 对于关系返回 nil

转载 作者:行者123 更新时间:2023-11-30 14:12:21 25 4
gpt4 key购买 nike

Xcode 7 beta 4

我有来自 Parse.comPoem 类。在我的 Parse User 类中,我有列 likedPoem ,它与类 Poem

相关

我的 Poem 类中只有一条记录。我之前将其添加到代码中的 likedPoem 中:

let query = PFQuery(className:"Poem")    
query.getObjectInBackgroundWithId(poemParseObjectId!) {

(poem: PFObject?, error: NSError?) -> Void in

if error == nil && poem != nil {

let user = PFUser.currentUser()
let relation = user!.relationForKey("likedPoem")
relation.addObject(poem!)
user!.saveInBackground()
}
}

我可以在解析数据浏览器中看到它

现在我想检查当前用户是否喜欢我正在展示的这首诗:

let user = PFUser.currentUser()
let relation: PFRelation = user!.relationForKey("likedPoem")
let query = relation.query()!
query.whereKey("likedPoem", equalTo: poem!)
query.getFirstObjectInBackgroundWithBlock {
(poem1: PFObject?, error: NSError?) -> Void in
print(poem1)
}

它打印nil

如果我更改它以检查该列中的内容:

<...>
//query.whereKey("likedPoem", equalTo: poem!)
query.getFirstObjectInBackgroundWithBlock {
(poem1: PFObject?, error: NSError?) -> Void in
print(poem1!)
print(poem!)


}

我可以看到 poem1!not nil 并且它实际上具有与 poem! 相同的属性值

问题:为什么query.whereKey("likedPoem", equalTo:诗歌!)返回我nil

最佳答案

欢迎来到 stackoverflow!

我想我发现了您的代码的问题。 likedPoem 是解析表中的关系列。您使用 relationForKey 正确检索它,但检索它后,查询约束不正确。您不能对此列施加约束,因为该列是一个关系。认为它有一个 Poem 类的子集。您现在正在查询 Poem 类的子集,并且对查询施加的任何约束都必须与 Poem 类中的列相关。

因此,对于您想要执行的操作,请删除 query.whereKey("likedPoem", equalTo:诗歌!) 约束,并根据您正在显示的诗歌对象检查结果。

现在,这只有效,因为您有一个 Poem 对象,并且您正在调用 query.getFirstObjectInBackgroundWithBlock。将来(如果用户喜欢更多诗歌),您将不得不稍微修改一下并将其更改为 query.findObjectsInBackgroundWithBlock 以便您可以检索所有喜欢的诗歌的数组,然后您可以检查显示的诗是否在该数组中。

顺便说一句,我在很多应用程序中使用了解析,并且我了解到关系并不总是最好使用的东西,当您使用它们时,弄清楚将它们放在哪个类中可能会很棘手来优化您的查询。这就是为什么在确定应用程序的架构之前应始终牢记您的查询。您可以通过以下一些其他方法来完成您想做的事情:

  • 您可以对当前查询设置约束,例如 query.whereKey("objectId", equalTo:诗歌!.objectId)。这将检查关系中所有诗歌对象的 objectId,并将其与所显示诗歌的 objectId 进行比较。现在,您可以使用 countObjectsInBackgroundWithBlock 而不是检索对象。从技术上讲,您不需要检索所有诗歌(因为您已经拥有了想要的一首诗),您只是想知道它是否在关系中,因此 count 可以完美地做到这一点。<
  • 改用 Poem 对象的 Array,因为有时可以更轻松地检查其中是否包含您的对象。
  • 您还可以将关系/数组移至 Poem 类。现在,它将是喜欢这首诗的用户的关系/数组,它完成同样的事情,但这完全取决于您的偏好,以及它是否适用于您的所有查询(查找所有用户喜欢的诗,查找用户谁喜欢一首诗,看看有多少人喜欢这首诗)

祝你好运!

关于ios - query.whereKey 对于关系返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31632980/

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