为什么未收到委托事件 swift?

Why delegate event is not received swift?

我想使用委托将数据从 EditPostViewController 传递到 NewsfeedTableViewController,但在采用 class NewsfeedTableViewController 时从未调用 func remove(mediaItem:_)。我做错了什么?

  NewsfeedTableViewController: UITableViewController, EditPostViewControllerDelegate {

  override func viewDidLoad() {
    super.viewDidLoad()

   //set ourselves as the delegate
   let editPostVC = storyboard?.instantiateViewController(withIdentifier: "EditPostViewController") as! EditPostViewController
    editPostVC.delegate = self
 }

  //remove the row so that we can load a new one with the updated data
      func remove(mediaItem: Media) {
        print("media is received heeeee")
        // it does't print anything
    }
}


   extension NewsfeedTableViewController {

//when edit button is touched, send the corresponding Media to EditPostViewController
     func editPost(cell: MediaTableViewCell) {

    let editPostVC = storyboard?.instantiateViewController(withIdentifier: "EditPostViewController") as? EditPostViewController
     guard let indexPath = tableView.indexPath(for: cell) else {
        print("indexpath was not received")
        return}

     editPostVC?.currentUser = currentUser
     editPostVC?.mediaReceived = cell.mediaObject
     self.navigationController?.pushViewController(editPostVC!, animated: true)
 }




 protocol EditPostViewControllerDelegate: class {
   func remove(mediaItem: Media)
 }

 class EditPostViewController: UITableViewController {

  weak var delegate: EditPostViewControllerDelegate?

   @IBAction func uploadDidTap(_ sender: Any) {

    let mediaReceived = Media() 
    delegate?.remove(mediaItem: mediaReceived)
  }
}

我建议 属性 在 NewsfeedTableViewController

var editPostViewController: EditPostViewController?

然后在实例化 EditPostViewController 时分配给它。

这个想法是当 NewsfeedTableViewController.viewDidLoad returns 时停止自动释放 class。

在 viewDidLoad(:) 和编辑按钮点击事件中实例化的对象不是同一个对象。做一个变量

var editPostVC: EditPostViewController?

在 viewDidLoad(:) 中用委托实例化

editPostVC = storyboard?.instantiateViewController(withIdentifier: "EditPostViewController") as! EditPostViewController
editPostVC.delegate = self

然后在点击事件中呈现

navigationController?.pushViewController(editPostVC, animated: true)

present(editPostVC, animated: true, completion: nil)

您可以在呈现 VC 之前或之后将数据从演示者传递到呈现的 VC。

editPostVC.data = self.data