【问题标题】:Parse query on Pointer value returning nil解析对返回 nil 的指针值的查询
【发布时间】:2016-03-27 04:25:17
【问题描述】:

我有一个表 UserProfile,它有一个指向相应用户表的指针列(用户)。我正在尝试构建一个简单的查询来获取用户对象的 UserProfile。但是,查询返回 nil(对象 = 我的应用程序中的用户对象):

let profileQuery = PFQuery(className: "UserProfile")
                    profileQuery.whereKey("user", equalTo: object)
                    profileQuery.includeKey("user")
                    profileQuery.limit = 1
                    profileQuery.findObjectsInBackgroundWithBlock{
                        (results: [PFObject]?, error: NSError?) -> Void in

                        if error != nil{
                            print(error)
                        } else if let results = results as? [PFObject]! {

                            for result in results {
                                self.profile = result
                            }
                        }
                    }

知道为什么这个查询不起作用吗?谢谢!

使用 Mazel 的解决方案更新代码:

query.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]?, error: NSError?) -> Void in

        if error != nil {

            print(error)

        } else if let objects = objects as? [PFObject]! {

            for object in objects {

      let profileQuery = PFQuery(className: "UserProfile")
                    profileQuery.whereKey("user", equalTo: PFObject(outDataWithClassName: "_User", objectId: "\(object.objectId!)"))
                    //profileQuery.includeKey("user")
                    profileQuery.limit = 1
                    profileQuery.findObjectsInBackgroundWithBlock{
                        (results: [PFObject]?, error: NSError?) -> Void in

                        if error != nil{
                            print(error)
                        } else if let results = results as? [PFObject]! {

                            for result in results {
                                self.profile = result
                            }
                        }
                    }

【问题讨论】:

  • 问题出在这一行 profileQuery.whereKey("user", equalTo: object) 但你没有分享什么是 object 这么难说...
  • 感谢您的回复! object 是我之前在应用程序中运行的另一个查询的结果。我没有包括它,所以它不会混淆人们。 object 是来自 User 表的 PFUser。所以我希望运行另一个查询来获取该用户的 UserProfile(该用户在我的查询中称为对象)。

标签: ios swift parse-platform swift2


【解决方案1】:

可能指针存储方式不同,试试这个

profileQuery.whereKey("user", equalTo: PFObject(outDataWithClassName: "_User", objectId: "\(object.objectId!)"))

你也可以删除这一行 profileQuery.includeKey("user")

【讨论】:

  • 谢谢!不幸的是,当它到达查询结果时,我仍然得到fatal error: unexpectedly found nil while unwrapping an Optional value。我用最新的代码更新了我的问题。 Xcode 让我将 withoutDataWithClassName 更改为 outDataWithClassName
  • 您的对象是否可选,请尝试将其更改为 object!.objectId!,我检查了 xcode,它也让我将其更改为 outDataWithClassName...
  • 它似乎是可选的。更新了我的问题。我添加了另一个获取对象的查询,以便您更好地了解正在发生的事情(我知道如果没有太多信息很难支持)。希望这会有所帮助
  • 我不知道您将在第一个查询中下载多少对象,但这是设计得很糟糕的数据库方案,因为对于您下载的每个对象,您都在尝试再次下载某些东西(同时)....考虑一下您的数据库方案,因为这很糟糕,网络请求总是非常昂贵!仅供参考,指针适用于 1:many 关系,Parse Relation 适用于 many:many...
  • 我同意这并不理想。我之所以将 User 表拆分为 User 和 UserProfile 是因为 User 的默认安全设置。用户现在拥有私人数据,而用户个人资料拥有公开信息。用户与用户配置文件是 1:1 的关系。有什么更好的方法来做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多