Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么我的饲料细胞复制?_Ios_Xcode_Swift - Fatal编程技术网

Ios 为什么我的饲料细胞复制?

Ios 为什么我的饲料细胞复制?,ios,xcode,swift,Ios,Xcode,Swift,我正在使用这段代码创建一个提要视图,该视图显示与instagram类似的用户、图像和评论。出于某种原因,提要上的单元格复制了当前用户的帖子。不仅如此,它还将错误的用户名和图像放在了重复的单元格中。我做错了什么 import UIKit import Parse class FeedTableViewController: UITableViewController { var usersBeingFollowed = [String]() var imageFiles = [

我正在使用这段代码创建一个提要视图,该视图显示与instagram类似的用户、图像和评论。出于某种原因,提要上的单元格复制了当前用户的帖子。不仅如此,它还将错误的用户名和图像放在了重复的单元格中。我做错了什么

import UIKit
import Parse

class FeedTableViewController: UITableViewController {

    var usersBeingFollowed = [String]()
    var imageFiles = [PFFile]()
    var imageComment = [""]
    var usernames = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.hidesBackButton = true


        let getFollowedUsersQuery = PFQuery(className: "Followers")

        getFollowedUsersQuery.whereKey("follower", equalTo: PFUser.currentUser()!.objectId!)

        getFollowedUsersQuery.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

            self.usernames.removeAll(keepCapacity: true)
            self.imageComment.removeAll(keepCapacity: true)
            self.imageFiles.removeAll(keepCapacity: true)
            self.usersBeingFollowed.removeAll(keepCapacity: true)

            if let objects = objects {

                for object in objects {

                    let followedUser = object["following"] as! String

                    let getFollowedUsers = PFQuery(className: "Post")

                    getFollowedUsers.whereKey("userId", equalTo: followedUser)

                    let getCurrentUser = PFQuery(className: "Post")
                    getCurrentUser.whereKey("userId", equalTo: (PFUser.currentUser()?.objectId)!)

                    var query = PFQuery.orQueryWithSubqueries([getFollowedUsers,getCurrentUser])

                    query.findObjectsInBackgroundWithBlock({ (imageObjects, error) -> Void in


                        if let objects = imageObjects {

                            for images in objects {

                                let userQuery = PFUser.query()
                                userQuery?.whereKey("_id", equalTo: images["userId"])
                                userQuery?.findObjectsInBackgroundWithBlock({ (user, error) -> Void in
                                    print(user)
                                    if let user = user {
                                        for username in user {
                                            self.usernames.append(username["username"] as! String)
                                        }

                                    }

                                })

                                self.imageFiles.append(images["imageFile"] as! PFFile)
                                self.imageComment.append(images["imageComment"] as! String)
                                self.tableView.reloadData()


                            }

                        }

                    })

                }

            }


        }



    }

    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 usernames.count
    }


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

        if imageFiles.count > 0{
            myCell.userLabel.text = "\(usernames[indexPath.row]) completed the \(imageComment[indexPath.row]) challenge!"
            imageFiles[indexPath.row].getDataInBackgroundWithBlock({ (data, error) -> Void in
                if let downloadedImage = UIImage(data: data!) {

                    myCell.imagePost.image = downloadedImage
//                    self.tableView.reloadData()

                }
            })
        }

        return myCell
    }

很明显,生成重复内容是因为您设置了
如果imageFiles.count>0
则显示数据的条件

但是如果没有图像呢?它肯定会从可重用的
UITableViewCell
中获取值。检查以下更改:

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

        if imageFiles.count > 0{
            myCell.userLabel.text = "\(usernames[indexPath.row]) completed the \(imageComment[indexPath.row]) challenge!"
            imageFiles[indexPath.row].getDataInBackgroundWithBlock({ (data, error) -> Void in
                if let downloadedImage = UIImage(data: data!) {

                    myCell.imagePost.image = downloadedImage
//                    self.tableView.reloadData()

                }
            })
        }else{

             myCell.userLabel.text = "Put What You Want Here" //make just nil 
             myCell.imagePost.image = UIImage(name: "placeholder.png") //Some Placeholder image when there is no data
        }
        return myCell
    }

在添加新值之前,应重置单元格属性,可以使用

prepareForReuse()

有关Apple Doc

单元格的更多信息将重复使用。在将单元格出列后,应在设置新内容之前清除所有旧内容