2015-04-23 46 views
0

我想要查詢我的數據庫中的所有Parse用戶,然後在TableView中顯示他們自己的單元格中的每個用戶。我建立了我的tableview,但我堅持把用戶查詢保存到可在tableview中使用的字符串數組中。我創建了一個loadParseData函數,用於在後臺查找對象,然後將查詢的對象追加到字符串數組中。不幸的是,我在附加數據的行上給出了一條錯誤消息。Swift將PFQuery轉換爲用於TableView的字符串數組

Implicit user of 'self' in closure; use 'self.' to make capture semantics explicit'這在我看來,它是我用self.,而不是usersArray.建議,因爲這是一個閉包內,但如果我運行這種方式,我給另一個錯誤,*classname* does not have a member named 'append'

這裏是我的代碼:

import UIKit 

class SearchUsersRegistrationViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    var userArray = [String]() 

    @IBOutlet var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.delegate = self 
     tableView.dataSource = self 

    } 

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


    func loadParseData(){ 

     var query : PFQuery = PFUser.query() 

     query.findObjectsInBackgroundWithBlock { 
      (objects:[AnyObject]!, error:NSError!) -> Void in 

      if error != nil{ 

       println("\(objects.count) users are listed") 

       for object in objects { 

        userArray.append(object.userArray as String) 

       } 
      } 

     } 

    } 


    let textCellIdentifier = "Cell" 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

     return 1 

    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     //return usersArray.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as SearchUsersRegistrationTableViewCell 

     let row = indexPath.row 

     //cell.userImage.image = UIImage(named: usersArray[row]) 

     //cell.usernameLabel?.text = usersArray[row] 

     return cell 
    } 


} 

回答

0

問題是userArray是一個NSArray。 NSArray是不可變的,這意味着它不能被改變。因此它沒有附加功能。你想要的是一個NSMutableArray,它可以被改變並且有一個addObject函數。

var userArray:NSMutableArray = [] 

func loadParseData(){ 
    var query : PFQuery = PFUser.query() 
    query.findObjectsInBackgroundWithBlock { 
     (objects:[AnyObject]!, error:NSError!) -> Void in 
     if error == nil { 
      if let objects = objects { 
       for object in objects { 
        self.userArray.addObject(object) 
       } 
      } 
      self.tableView.reloadData() 
     } else { 
      println("There was an error") 
     } 
    } 
} 

而且,因爲對象是爲「AnyObject」你必須按順序使用它們這樣投他們作爲PFUsers在某個時刻返回。只是要記住

用於獲取用戶的用戶名,並顯示它

//將這個中的cellForRowAtIndexPath

var user = userArray[indexPath.row] as! PFUser 
var username = user.username as! String 
cell.usernameLabel.text = username 
+0

感謝您的回答,這是非常有益的,但我想知道如果您可以幫助我處理需要播放的對象,以便在單元格中顯示用戶。我解釋說,設置'cell.usernameLabel.text = userArray [行]爲? PFUsers'但我顯示'不能分配'PFUser'類型的值?到'String?'類型的值?'我是否在投射錯誤的對象? – cphill

+0

一個PFUser是一個類 - 基本上是一個字典 - 具有不同的鍵/值對:電子郵件,用戶名等...將文本標籤設置爲PFUser不會獲取用戶名,它會嘗試使用整個PFUser,不要做。您必須自行獲取PFUser的用戶名屬性。嘗試像我上面添加的東西。 – user3353890

+0

我無法將其格式化爲評論,我將其添加爲上面的答案。 – user3353890