1

我正在使用PFQueryTableViewController從Parse中檢索對象。這個特定的Parse類有三列(組,類別,客戶端),它們是指向其他Parse類的指針。我想使用includeKey選項爲每個指針對象引入所有對象數據。但是,當我運行下面的代碼時,我確實檢索了有關每個指針列(如ObjectID)的基本數據,但沒有其他列,如Category類的「名稱」列。PFK中的IncludeKeys不返回所有關係數據

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.' 

此相同的錯誤結果,當我試圖訪問的任何其他科拉姆我的指針引用對象的ns。

當我我print(category)似乎得到了有效的(但是空的)對象在我的日誌,沒有其他列,如「名」:

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

我已經成功地測試調用建議取查詢檢索每個指針列的丟失指針數據,但是(恕我直言)附加訪存失敗了查詢選項的目的以限制API請求。

我以爲曾經有過一個PFQuery可能只允許一個includeKey調用。但是,我通過Parse's own iOS documentation和各種開發人員帖子所做的研究並未指出任何查詢可以具有的最大數量限制。

我正在做一些不受Parse支持的東西,還是我只是在語法上不正確地檢索每個指針的對象數據?

我運行的是最新ParseUI作爲此公告(1.1.6)和解析(1.9.0)和Xcode 7.0.1

的預先感謝您閱讀我的文章!我只有幾個月的時間學習iOS開發,所以這同時很有趣和令人沮喪!

回答

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 


} 

這允許你使用上面的語法,我有回答。

+0

使用'object:PFObject!'替換'cellForRowAtIndexPath'這個技巧。謝謝! – Majedian21