2015-07-20 64 views
0

我試圖獲取屬於Vitrine所有者的客戶端的名稱。
無法訪問PFRelation的屬性

這是我的代碼。
爲了節省我這樣做的數據:

self.vitrine["username"] = PFUser.currentUser()?.username 
    self.vitrine["name"] = nameTextField.text as String 
    var relation = self.vitrine.relationForKey("client") 
    relation.addObject(self.client) 

    self.vitrine.saveEventually { (success, error) -> Void in 

     if(error == nil){ 



     }else{ 

      println(error?.userInfo) 

     } 

     self.fetchAllVitrines() 

    self.navigationController?.popToRootViewControllerAnimated(true) 
    } 
} 

和它的作品。在解析中,我可以看到關係的工作。

我試圖關係的訪問數據這樣做:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("vitrineCell", forIndexPath: indexPath) as! VitrineTableViewCell 

    var object: PFObject = self.vitrineObjects.objectAtIndex(indexPath.row) as! PFObject 

    cell.nomeLabel.text = object["name"] as? String 
    let x: PFRelation = object["client"] as! PFRelation 
    // cell.clientNameTextView.text = object["client"]["name"] as String 

    return cell 
} 

但當我日誌中的數據內的客戶端列是什麼出現對我來說:
<PFRelation: 0x7b7f1390, 0x7b7cfdc0.client -> Client>

請別人幫助我。我在那裏2天。我閱讀了3次以上的解析文檔。我沒有辦法做到這一點。

問候, 迪奧戈·阿馬拉爾


嗯,我添加代碼:

query!.getFirstObjectInBackgroundWithBlock { 
    (object: PFObject?, error: NSError?) -> Void in 

    if error != nil || object == nil { 

     println("The getFirstObject request failed.") 

    } else { 

     println(object) 
     cell.clientNameTextView.text = object["name"] as? String 

    } 

} 

但行:cell.clientNameTextView.text = object["name"] as? String 拋出我的錯誤。 「不能分配'String?'類型的值類型爲 '字符串!'」的價值...

我已經嘗試過:
cell.clientNameTextView.text = object["name"] as! String cell.clientNameTextView.text = object["name"] as String cell.clientNameTextView.text = object["name"] as? String

我怎麼能解決呢?

回答

0

如果您使用的是關係(而不是指針),那麼您需要知道關係存儲其目標對象的數組。所以,當你執行

您要添加到self.clientclient在數組。如果一個玻璃窗只能擁有一個所有者,並且這應該存儲在客戶端字段中,那麼您可能需要使用指針而不是關係。

由於這個數組,你寫的代碼就不會工作。您需要從您的玻璃體對象獲得關係,查詢它,從您想要的數組中提取元素,然後才能使用它。

let x: PFRelation = object["client"] as! PFRelation 
let query = x.query() 
// Lets say that you are only interested in the first element in your array... 
query.getFirstObjectInBackgroundWithBlock { first, error in 
    // Should do error checking here 
    cell.clientNameTextView.text = first!.objectForKey("name") as? String 
} 

這種方法也有點低效。您應該使用某種形式的緩存,或者理想情況下,確定是否確實需要使用關係或指針是否足夠。如果指針可以執行,那麼當您通過PFQuery上的includeKey方法運行原始查詢時,還可以包含它指向的數據。您不能在關係上使用includeKey

+0

@DiogoAmaral我已經更新了示例代碼來處理第一個對象的可選性,並將其轉換爲String。 – rickerbh