【问题标题】:Parse query using pointers使用指针解析查询
【发布时间】:2016-01-02 04:00:09
【问题描述】:

为简单起见,我有两个类LocationProgramLocationobjectIdname,而ProgramobjectIdnamelocation(这是一个指向LocationObjectId 的指针)。当用户选择一个位置时,如何在查询中返回关联的程序?下面的代码现在不起作用。

let pointer = PFObject(withoutDataWithClassName: "location", objectId: passedLocationID!) //passedLocationID is a string containing the ObjectId from the selected location    

let query = PFQuery(className:"Program")
query.whereKey("location", equalTo: pointer.objectId!)
query.findObjectsInBackgroundWithBlock {
    (objects: [PFObject]?, error: NSError?) -> Void in
    if error == nil {
        if let objects = objects {
            for object in objects {
                self.programName.append(object["name"] as! String)
                self.programID.append(object.objectId! as String)
            }
        }
    } else {
}

此查询将以下错误打印到控制台“指针字段位置需要指针值”

返回相关程序的正确代码是什么?

编辑

我找到了解决方案,但这似乎有点过头了。 Parse 的两个查询,我觉得这应该只使用 1 个查询来完成。

let firstQuery = PFQuery(className: "Location")
firstQuery.whereKey("objectId", equalTo: passedLocationID!)
    
let secondQuery = PFQuery(className: "Program")
secondQuery.includeKey("location")
secondQuery.whereKey("location", matchesQuery: firstQuery)
secondQuery.findObjects.......

【问题讨论】:

    标签: ios swift parse-platform


    【解决方案1】:

    所以我找到了答案。

    当我将位置传递给程序视图控制器时,我需要将其作为 PFObject 传递。

    var passedLocationID: PFObject?
    

    然后只需一个简单的查询即可。

    let newQuery = PFQuery(className: "Program")
    newQuery.whereKey("location", equalTo: passedLocationID!)
    

    【讨论】:

      【解决方案2】:

      添加为 Swift 3+ 更新的正确答案,以防有人搜索:

      guard let query = ProgramModel.query(), let pointerQuery = LocationModel.query() else {
         // Your parse class isn't set up correctly. Handle error.
         return
      }
      
      // You can also use other parameters like `notEqualTo` or `containedIn`.
      pointerQuery.whereKey("objectId", equalTo: passedLocationId)
      
      // The important line is the one below, which calls the pointer query:
      query.whereKey("location", matchesQuery: pointerQuery)
      query.includeKey("location")
      query.findObjects... or query.countObjects...
      

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多