Я пытаюсь перенести свой объект из HockeyDetailVC в мой FavouritesVC с помощью кнопки, но мой объект равен нулю, когда я достигаю своего второго VC FavouritesVC. Почему это так, когда я устанавливаю переменную в своем firstVC с помощью функции func transferObj ()?

HockeyDetailVC

var item: CurrentPlayers?

override func viewDidLoad() {
        super.viewDidLoad()
        gonnaLoadView()
        tableV.bounces = false
        tableV.alwaysBounceVertical = false
        favButton.layer.cornerRadius = 10
        print(item)    *//prints my current players object*
    }

   func transferObj() {
        let otherVC = FavouritesVC()
        otherVC.currentFav = item
        print(item).  *//prints my current player object*
    }

  @IBAction func addToFav(_ sender: Any) {
    transferObj()
    print("Favourite button Pressed")
}

FavouritesVC

  var currentFav: CurrentPlayers?

  override func viewDidLoad() {
    super.viewDidLoad()
    if currentFav == nil {
    //display nil
    self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
    print(favArr)    *//prints empty array*
    print(currentFav) *//nil*
    } else {
    favArr.append(currentFav!)
    print(favArr)
    }
}
0
BStorm 13 Фев 2021 в 10:43

1 ответ

Лучший ответ

Как заявил @Martin, let otherVC = FavouritesVC() создает новый экземпляр контроллера, но это не тот экземпляр, который вы в конечном итоге отобразите. Таким образом, вы фактически устанавливаете currentFav случайного FavouritesVC, который никогда не будет отображаться, в то время как тот, к которому вы в конечном итоге выполняете переход, имеет свойство currentFav по-прежнему не установленным.

Чтобы установить соответствующий экземпляр FavouritesVC, вам необходимо получить к нему доступ одним из нескольких способов (в зависимости от того, как вы его представляете). Если это происходит через переход, вы можете ссылаться на него в методе prepare(for segue: sender:). (Когда вы создаете файл Cocoa Touch Class, нижеприведенный шаблон метода заполняется заранее. В нем указывается ссылка на новый контроллер представления с помощью segue.destination.)

/*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

В качестве альтернативы, если вы создаете и представляете новый контроллер представления программно с помощью чего-то вроде

// 1.
let otherVC = storyboard?.instantiateViewController(withIdentifier: "yourFavouritesVCIdentifier")

// 2.

// 3.
self.show(otherVC, sender: self)

Вы можете вставить свой otherVC.currentFav = item в строку // 2..

1
Eric33187 13 Фев 2021 в 08:30