2015-07-20 60 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