1

PFQueryTableViewController用来从 Parse 中检索对象。这个特定的 Parse 类具有三列(组、类别、客户端),它们是指向其他 Parse 类的指针。我想使用该includeKey选项为每个指针对象引入所有对象数据。但是,当我运行下面的代码时,我确实检索了有关每个指针列(如 ObjectID)的基本数据,但没有检索其他列,如 Category 类的“name”列。

override func queryForTable() -> PFQuery {
        let query:PFQuery = PFQuery(className:self.parseClassName!)
        query.whereKey("client", equalTo: currentUser!)
        query.whereKey("status", equalTo: "Open")
        query.whereKey("expires", greaterThan: NSDate())
        query.includeKey("group")
        query.includeKey("category")
        query.includeKey("client")
        query.orderByAscending("expires")

        if(objects?.count == 0)
        {
            query.cachePolicy = PFCachePolicy.CacheThenNetwork
        }

        return query
    }

当我的 PFQueryTableViewController 调用它的 cellForRowAtIndexPath 函数时,我有代码来获取通过引入的类别对象的“名称”列includeKey

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
    ...
    if let category = task["category"] as? PFObject {
        cell?.categoryLabel.text = String(category["name"])
    }
    ...
}

在 Xcode 中运行对类别的“名称”值的检索会导致以下错误和崩溃:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Key "name" has no data.  Call fetchIfNeeded before getting its value.'

当我尝试访问指针引用对象的任何其他列时,也会出现同样的错误。

当我print(category)似乎在我的日志中获得一个有效(但为空)的对象时,没有其他列,例如“名称”:

<Category: 0x13c6ed870, objectId: mEpn6TH6Tc, localId: (null)> {
}

我已经成功测试了调用建议的提取查询来检索每个指针列的丢失指针数据,但是(恕我直言)额外的提取破坏了includeKey查询选项限制 API 请求的目的。

我的一个想法是,aPFQuery可能只允许一个includeKey电话。但是,我通过Parse 自己的 iOS 文档includeKeys和各种开发人员帖子所做的研究并未表明查询的最大数量有任何限制。

我是在做 Parse 不支持的事情,还是只是在语法上没有以正确的方式检索每个指针的对象数据?

截至本文发布时,我正在运行最新的 ParseUI (1.1.6) 和带有 Xcode 7.0.1 的 Parse (1.9.0)

提前感谢您阅读我的帖子!我学习 iOS 开发只有几个月的时间,所以这既有趣又令人沮丧!

4

1 回答 1

1
cell.category.text = object.objectForKey("category")!.objectForKey("name") as! String

此外,使用 cellForRowAtIndexPath 的另一个“版本”,即 PFQueryTableViewControllers 的那个:

  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> PFTableViewCell? {
    //4

    let cell = tableView.dequeueReusableCellWithIdentifier("yourCellIdentifier", forIndexPath: indexPath) as! yourCell


        return cell


}

这允许您使用我回答的上述语法。

于 2015-10-26T14:28:17.277 回答