使用数组

时间:2016-01-15 08:28:49

标签: ios arrays swift predicate

这是我尝试从namesArray中的用户解析图片的功能。

func fetchData(){

    let imagePredicate = NSPredicate(format: "username IN %@", namesArray)
    let imageQuery = PFQuery(className: "_User", predicate: imagePredicate)

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

        if error == nil {

            for object in objects! {            
                self.imagesArray.append(object["image"] as! PFFile)
                if self.imagesArray.count == self.namesArray.count {
                self.tableView.reloadData()
            }

        } else {
            print("error: \(error?.localizedDescription)")
        }
    }
}

这是我的tableView:cellForRowAtIndexPath方法:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! ChatsCell
    cell.nameLabel.text = namesArray[indexPath.row]

    if imagesArray.count == namesArray.count && self.imagesLoaded == false{
        imagesArray[indexPath.row].getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in
            if error == nil {
                let image = UIImage(data: imageData!)
                cell.imageView?.image = image
                self.tableView.reloadData()
                self.imagesLoaded = true
            }
        }
    }

    return cell
}

但是当我这样做时,我发现图像与用户名不同步。即使我将用户放在其他订单中,图像也会保持与之前相同的顺序。 我怎样才能改变它?

2 个答案:

答案 0 :(得分:0)

不确定你在这里问的是什么。您是否期望图像以用户排序的数组返回?

如果是这样,那么您需要在PFQuery中添加排序顺序。我建议你按用户名排序namesArray,然后按用户名对imageQuery进行排序:

imageQuery.orderByDescending("username")

希望我明白这个问题;]

- T的

答案 1 :(得分:0)

所以我发现,如果你使用一个查询,你将收到有序数据,所以我改变了我的代码,现在它工作得很好。所以我所做的就是我会查询namesArray的每个单独成员:

   func fetchData() {

    for index in 0..<self.namesArray.count {

        let imagePredicate = NSPredicate(format: "username == %@", namesArray[index])
        let imageQuery = PFQuery(className: "_User", predicate: imagePredicate)

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

            if error == nil {
                for object in objects! {
                    self.imageFilesArray![index] = object["image"] as? PFFile
                }

                for imageFile in self.imageFilesArray! {
                    let index = self.imageFilesArray?.indexOf{$0 == imageFile}
                    imageFile?.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
                        let userImage = UIImage(data: imageData!)
                        self.imagesArray?[index!] = userImage
                        self.tableView.reloadData()
                    })
                }
            }
        })
    }
}

这里是tableView:cellForRowAtIndexPath:

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

    cell.nameLabel.text = namesArray[indexPath.row]
    cell.messageTextLabel.text = messagesArray[indexPath.row]
    cell.chatImageView.image = self.imagesArray![indexPath.row] != nil ? self.imagesArray![indexPath.row] : UIImage(named: "add")
    return cell

}