Array.append被覆盖而不是附加

时间:2020-05-19 22:00:38

标签: ios arrays swift uitableview

我有两个视图控制器,一个包含一个包含两个部分的表格视图,在其中我显示电影列表,另一个视图控制器可以在其中添加电影。假定包含表视图的视图控制器为VC1,添加影片为VC2。 问题是当我在VC2中添加电影并将其追加到VC1中的电影列表时,它只是替换了先前添加的电影。 我仅在运行时在本地添加电影。因此,每当我运行该应用程序时,列表最初包含0部电影。因此,我添加了电影,然后将其添加到列表中。当我尝试添加另一部电影时,它会替换之前的电影,好像列表中不能包含多个电影一样。

这是我追加数组的地方:

@IBAction func addMovieButtonClicked(_ sender: UIButton) {
        if imageView.image == nil || movieTitleField.text == "" || movieDateField.text == "" || movieOverviewField.text == "" {
            displayAlert(title: "Warning", message: "Please enter all data to be able to add your movie!")
        } else {
            let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
            let movie = Movie(title: movieTitleField.text!, overview: movieOverviewField.text!, date: movieDateField.text!)
            vc.customMovies.append(movie)
            vc.customImages.append(imageView)
            self.navigationController?.pushViewController(vc, animated: true)
        }
    }

但是当我回到VC1时,我发现数据被替换而不是附加。有解决方案吗?

编辑: 包含我显示的数据的tableView的第一个视图控制器称为ViewController。添加影片的第二个影片叫AddMovie。

这是我导航至AddMovie的方式:

@IBAction func addMovieButton(_ sender: UIBarButtonItem) {
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "AddMovie") as! AddMovie
        self.navigationController?.pushViewController(vc, animated: true)
    }

1 个答案:

答案 0 :(得分:3)

您每次都在创建新的实例...

 self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController

您需要获取当前内容,然后追加。要附加电影,您可以使用委托以及闭包

要使用代理人

protocol AddMoviesToController:AnyObject {
    func addMoviesToController(movie:Movie , image:UIImage)
}

class AddMovie:UIViewController {
    weak var delegate:AddMoviesToController?


    @IBAction func addMovieButtonClicked(_ sender: UIButton) {
        if imageView.image == nil || movieTitleField.text == "" || movieDateField.text == "" || movieOverviewField.text == "" {
            displayAlert(title: "Warning", message: "Please enter all data to be able to add your movie!")
        } else {
            let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
            let movie = Movie(title: movieTitleField.text!, overview: movieOverviewField.text!, date: movieDateField.text!)
            delegate?.addMoviesToController(movie: movie, image: imageView)
            self.navigationController?.pushViewController(vc, animated: true)
        }
    }

}

将这样的扩展名写入viewController

extension ViewController: AddMoviesToController {
    func addMoviesToController(movie:Movie , image:UIImageView) {
        //add movies here
        customMovies.append(movie)
        customImages.append(image)
       tableView.reloadData()
    }
}

同时按下控制器

class ViewController: UIViewController {
    @IBAction func addMovieButton(_ sender: UIBarButtonItem) {
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "AddMovie") as! AddMovie
        vc.delegate = self
        self.navigationController?.pushViewController(vc, animated: true)
    }
}
相关问题