swift:完成处理程序

时间:2016-07-10 12:34:41

标签: ios swift parse-platform tableview

所以,我有方法loadData()parse.com

下载数据

enter image description here

我应该在表格视图中显示所有图像。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("ReusableCell", forIndexPath: indexPath) as! LeaguesTableViewCell

    loadData { (success) in
        if success {
            cell.leagueImage.image = UIImage(data: self.leaguesImage[indexPath.row])
            cell.leagueNameLabel.text = self.leagues[indexPath.row]["name"] as? String
        } else {
            cell.leagueNameLabel.text = "Wait"
        }
    }


    return cell

}

它不起作用。我在viewDidLoad()中调用我的函数,但它也不正确,表视图为空。

enter image description here 因为我的数组是空的

2 个答案:

答案 0 :(得分:3)

将数据加载到UITableView的基本过程是:

  1. 加载数据
  2. 重新加载表格视图
  3. numberOfSectionsInTableView:方式返回部分的数量:在您的情况下,只有1个部分。
  4. 返回tableView:numberOfRowsInSection:中的行数:在您的情况下,如果加载了数据,则返回联赛数量。如果未加载数据,则返回1,以便表视图至少有一行显示"等待"消息。
  5. 创建并填充数据中的单元格:使用leaguesleaguesImage
  6. 示例:

    private var loaded = false   
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        loaded = false
    
        loadData() { success in
            NSOperationQueue.mainQueue().addOperationWithBlock() {
                self.loaded = success
                self.tableView.reloadData()
            }
        }
    }
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection: Int) -> Int {
        if loaded {
            return leagues.count 
        }
        else {
            return 1
        }
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        let cell = tableView.dequeueReusableCellWithIdentifier("ReusableCell", forIndexPath: indexPath) as! LeaguesTableViewCell
    
        if loaded {
            cell.leagueImage.image = UIImage(data: self.leaguesImage[indexPath.row])
            cell.leagueNameLabel.text = self.leagues[indexPath.row]["name"] as? String
        }
        else {
            cell.leagueNameLabel.text = "Wait"
        }
    
        return cell
    }
    

答案 1 :(得分:1)

首先尝试设置委托和数据源。如果您有除视图控制器之外的单独数据源,请保留它,否则您将无法获得任何回调。