2016-04-22 31 views
0

我看到以下問題。 Get data from a pointer's row in Parse (ios)從Parse(iOS)中的指針列中獲取數據

和其他各種問題,但仍無法弄清楚。

我在解析一類被稱爲「水管工」 enter image description here

正如你可以看到「practiceArea」是一個指向這個類稱爲「PracticeArea」(介意在類中的大寫字母P) enter image description here 所以從這裏我想爲相應的指針提取相應的「標題」列值。我怎樣才能做到這一點?

這也是迄今爲止

// 
// Directory.swift 
// plumber_main 
// 
// Created by James on 13/4/16. 
// Copyright © 2016 James. All rights reserved. 
// 

import UIKit 
import Parse 

class Directory: UITableViewController { 




    @IBOutlet var plumbersDirectory: UITableView! 

    var profImages = [PFFile]() 
    var plumberName = [String]() 
    var plumberRate = [NSNumber]() 
    var plumberPracArea = [PFObject]() 
    var plumberExp = [String]() 



    var refresher: UIRefreshControl! 



    func refresh() 
    { 
     let query_one = PFQuery(className: "PracticeArea") 
     query_one.includeKey("title") 
     let query = PFQuery(className: "plumber") 
     query.includeKey("practiceArea") 
     query.orderByDescending("createdAt") 

     query.findObjectsInBackgroundWithBlock(

      { 
       (listll: [PFObject]?, error: NSError?) -> Void in 

       if error == nil { 
        // The find succeeded. 
        print("Successfully retrieved \(listll!.count) names of the plumbers.") 
        // Do something with the found objects 
        if let objects = listll { 
         for object in objects { 
          print(object) 

          self.profImages.append(object["photo"] as! PFFile) 
          self.plumberName.append(object["name"] as! String) 
          self.plumberExp.append(object["expLevel"] as! String) 
          self.plumberPracArea.append(object["practiceArea"] as! PFObject) 
          print(object ["practiceArea"].objectId) 
          self.plumberRate.append(object["ratePerHr"] as! NSNumber) 


          // print(object["plumber_Name"] as! String) 
          // self.plumbersname.append(object["plumber_Name"] as! String) 
          //self.lblName.text = object["plumber_Name"] as? String 

         } 
         self.plumbersDirectory.reloadData() 
        } 
        print(self.plumberName.count) 
       } else { 
        // Log details of the failure 
        print("Error: \(error!) \(error!.userInfo)") 
       } 
       self.tableView.reloadData() 
       self.refresher.endRefreshing() 
     }) 

    } 





    override func viewDidLoad() { 
     super.viewDidLoad() 

     refresher = UIRefreshControl() 
     refresher.attributedTitle = NSAttributedString(string: "Pull to refrehsh") 
     refresher.addTarget(self, action: "refresh", forControlEvents: UIControlEvents.ValueChanged) 
     self.tableView.addSubview(refresher) 

     refresh() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     // #warning Incomplete implementation, return the number of sections 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete implementation, return the number of rows 
     return plumberName.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let plumbercell: plumber_Directory_Cell = tableView.dequeueReusableCellWithIdentifier("plumberlistproto") as! plumber_Directory_Cell 


     plumbercell.name.text = plumberName[indexPath.row] 
     plumbercell.exp.text = plumberExp[indexPath.row] 



     plumbercell.pracArea.text = String(plumberPracArea[indexPath.row]) 
     plumbercell.price.text = String (plumberRate[indexPath.row]) 
     profImages[indexPath.row].getDataInBackgroundWithBlock{(imageData: NSData?, error: NSError?) -> Void in 
      if imageData != nil { 
       let image = UIImage(data: imageData!) 
       plumbercell.mini_image.image = image 
      } 
      else 
      { 
       print(error) 
      } } 

     //cell.textLabel?.text = plumbersname[indexPath.row] 

     return plumbercell 
    } 


    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    { 
     print(indexPath.row) 
    } 



} 

回答

1

我的代碼試試這個

func refresh() 
     { 

      let query = PFQuery(className: "PracticeArea") 
      query.includeKey("practiceArea") 
      query.orderByDescending("createdAt") 

      query.findObjectsInBackgroundWithBlock({ 
       (listll: [PFObject]?, error: NSError?) -> Void in 

       if error == nil { 
        // The find succeeded. 
        print("Successfully retrieved \(listll!.count) names of the plumbers.") 
        // Do something with the found objects 
        if let objects = listll { 
         self.plumberName = objects 
        } else { 
         self.plumberName.removeAllObjects() 
        } 
         self.plumbersDirectory.reloadData() 

        print(self.plumberName.count) 
       } else { 
        // Log details of the failure 
        print("Error: \(error!) \(error!.userInfo)") 
       } 
      }) 

     } 

     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
      let plumbercell: plumber_Directory_Cell = tableView.dequeueReusableCellWithIdentifier("plumberlistproto") as! plumber_Directory_Cell 

      let object = plumberName[indexPath.row] 

      plumbercell.name.text = object["name"] 
      plumbercell.exp.text = object["expLevel"] 
      let practiceArea = object["practiceArea"] 
      plumbercell.pracArea.text = practiceArea["title"] 



      plumbercell.pracArea.text = String(plumberPracArea[indexPath.row]) 
      plumbercell.price.text = String (plumberRate[indexPath.row]) 
      profImages[indexPath.row].getDataInBackgroundWithBlock{(imageData: NSData?, error: NSError?) -> Void in 
      if imageData != nil { 
       let image = UIImage(data: imageData!) 
       plumbercell.mini_image.image = image 
      } 
      else 
      { 
       print(error) 
      } } 

      //cell.textLabel?.text = plumbersname[indexPath.row] 

      return plumbercell 
     } 
+0

請問您能解釋一下我需要爲數組添加什麼代碼? tks – JackyBoi

+0

你能來skype或發送給我你的代碼嗎? –

+0

我可以有你的Skype? – JackyBoi

0

你是非常接近,絕對不是「做這一切的錯」。既然你已經包含在查詢請求的關鍵,當你想從該對象的信息太多,那麼你只需要這個

let practiceArea = object["projectArea"] as! PFObject 
let title = practiceArea["title"] as? String 
+0

請您詳細說明一下嗎?真的想把這些東西放在一起,你可以編輯我的確切代碼嗎?謝謝。 – JackyBoi

0

你應該查詢不同的類,如果你想使用與指針「includeKey」...

let query: PFQuery = PFQuery(className: "PracticeArea") 
    query.orderByDescending("createdAt") 
    query.includeKey("practiceArea") 
    query.findObjectsInBackgroundWithBlock{ 
     (objects:[PFObject]?, error:NSError?)->Void in 
     if error == nil{ 
      for object in objects! { 
       //do stuff with each object 
      } 
     } 
    } 
+0

你的意思是說沒有必要進行兩個查詢? – JackyBoi

+0

你應該告訴我們你想完成什麼,只分享相關的代碼段,沒有人會讀全班 –

+0

但是我添加額外代碼的原因是爲了表明我實際上使用了來自Plumber並且只有一個專欄需要來自'PracticeArea'類,所以我最好用代碼而不是文字來表示。 – JackyBoi