无法访问PFRelation的属性

时间:2015-07-20 21:10:25

标签: ios swift parse-platform pfobject pfrelation

我正在尝试获取作为Vitrine所有者的客户的名称。

这是我的代码。
要保存数据我正在这样做:

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)
    }
}

它有效。在Parse我可以看到关系工作。

我正在尝试访问关系的数据:

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天了。我阅读了Parse Doc的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'类型的值?'到“String!”类型的值“...”

我已经尝试过:
cell.clientNameTextView.text = object["name"] as! String cell.clientNameTextView.text = object["name"] as String cell.clientNameTextView.text = object["name"] as? String

我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您正在使用关系(而不是指针),那么您需要知道关系存储其目标对象的数组。所以,当你执行

var relation = self.vitrine.relationForKey("client")
relation.addObject(self.client) 

您将self.client添加到client的数组中。如果一个vitrine只能拥有一个所有者,而且应该存储在client字段中,那么你可能想要使用Pointer而不是Relation。

由于这个数组,你编写的代码不会起作用。你需要从你的vitrine对象中获取关系,查询它,从你想要的数组中提取元素,然后你可以使用它。

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
}

这种方法也有点低效。您应该使用某种形式的缓存,或者理想情况下,确定您是否确实需要使用Relation或者指针是否足够。如果指针有效,您还可以通过includeKey上的PFQuery方法包含它在您运行原始查询时指向的数据。您无法在关系中使用includeKey