0

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

そして、それは機能します。解析では、関係が機能していることがわかります。

私はこれを行う関係のデータにアクセスしようとしています:

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!' の値に変換します。"...

私はすでに試しました:
cell.clientNameTextView.text = object["name"] as! String cell.clientNameTextView.text = object["name"] as String cell.clientNameTextView.text = object["name"] as? String

どうすれば修正できますか?

4

1 に答える 1

0

(ポインターではなく) リレーションを使用している場合は、リレーションが宛先オブジェクトの配列を格納することに注意する必要があります。したがって、実行すると

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

self.clientの配列に追加していますclient。ビトリンの所有者を 1 人しか持てず、これを client フィールドに格納する必要がある場合は、Relation ではなく Pointer を使用することをお勧めします。

この配列のため、書かれたコードは機能しません。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 を本当に使用する必要があるかどうか、または Pointer で十分かどうかを判断する必要があります。includeKeyPointer で十分な場合は、メソッド onを介して元のクエリを実行するときに、Pointer が指すデータを含めることもできますPFQueryincludeKeyRelationでは使用できません。

于 2015-07-21T06:13:28.283 に答える