我是Parse的新手(parse.com)。我在parse.com上有这样的表:
我想要检索这3张图片并放入表视图行。这是我的代码:
class LeaguesTableViewController: UITableViewController {
var leagues = [PFObject]() {
didSet {
tableView.reloadData()
}
}
var leaguesImage = [NSData]() {
didSet {
tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
loadData()
tableView.registerClass(LeaguesTableViewCell.self, forCellReuseIdentifier: "ReusableCell")
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return leagues.count
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 160
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("ReusableCell", forIndexPath: indexPath) as! LeaguesTableViewCell
cell.leagueImage.image = UIImage(data: leaguesImage[indexPath.row])
cell.leagueNameLabel.text = leagues[indexPath.row]["name"] as? String
return cell
}
// MARK: Parse
func loadData() {
let query = PFQuery(className: "Leagues")
query.findObjectsInBackgroundWithBlock { (objects, error) in
if( objects != nil && error == nil) {
// List of leagues
for i in objects! {
self.leagues.append(i)
// Retrieve images
let imageFile = i["image"] as? PFFile
imageFile!.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in
if error == nil {
if let imageData = imageData {
self.leaguesImage.append(imageData)
}
}
}
}
} else if error != nil {
print("Error is: \(error)")
}
}
}
}
这是我的代码,从我的观点来看,一切都还可以。但我有错误:索引超出范围。我的leaguesImages数组是空的。谢谢。
答案 0 :(得分:0)
您的问题是leagues
和leaguesImages
不同步。从Parse检索数组后,您立即添加leagues
,但leaguesImages
仅在getDataInBackgroundWithBlock
完成后添加。{/ p>
我不会立即下载图像数据并将其存储在单独的数组中,而是将leagues
属性添加到自定义单元格中,然后我会下载数据并应用图像。
填充数组就像填充leaguesImages
数组一样,当订单重要时,这是一个坏主意,因为你不知道哪一个会先完成下载,也许第二个联盟图像是最小的,它将被设定为第一联赛的形象。 (PS:图像大小不是决定下载需要多长时间的唯一因素)