для выхода из индекса после запуска функции с другого контроллера представления

#swift #xcode #uiviewcontroller #segue

#быстрый #xcode #uiviewcontroller #segue

Вопрос:

У меня есть PopupViewController, который вызывает функцию из моего GameViewController, которая до сих пор работала идеально.

  //from my game view controller  for i in 0...6 {  imagesAll[i].setImage(nil, for: .normal)  }    if cardIndex != 0 {  for i in 0...cardIndex - 1 {  imagesAll[i].setImage(cards.map({$0.image})[i], for: .normal)  }  }  

Я тестировал этот код сотни раз, и он был в порядке. Это часть моей функции reset() моего контроллера GameViewController. В моем PopupViewController я вызываю функцию gameVC.removingCard() с параметрами

 //in my popup view controller  @IBAction func removePressed(_ sender: UIButton) {  dismiss(animated: true, completion: nil)  gameVC.removingCard(indexToRemove: index!)    }  

который содержит функцию resetImages() с параметрами

 func removingCard(indexToRemove: Int) {    ...  ...  ...      resetImages(cards: myDeck)  ...  ...  ...   }  

и когда он вызывается, теперь я получаю ошибку out of index, которую я не получал за недели тестирования кода. Есть ли что-то, что я делаю неправильно при вызове этого кода из другого VC? Я знаю, что с этим кодом не так много работы, но, возможно, я упускаю что-то очевидное.

  {  let parentsOne = cards.suffix(2)  var imagesAll: [UIButton] = []  if isPlayerOneTurn {  imagesAll = imageArray  } else {  imagesAll = imageArray2  }        var cardIndex = cards.count - 2  for i in 0...6 { //this line: Out Of Index Error  imagesAll[i].setImage(nil, for: .normal)  }    if cardIndex != 0 {  for i in 0...cardIndex - 1 {  imagesAll[i].setImage(cards.map({$0.image})[i], for: .normal)  }  }    if gameManager.pileCards.count == 0 {  drawingCard.setImage(nil, for: .normal)  } else {  drawingCard.setImage(gameManager.pileCards.last?.image, for: .normal)  }    if gameManager.secondPile.count == 0 {  secondDraw.setImage(nil, for: .normal)  } else {  secondDraw.setImage(gameManager.secondPile.last?.image, for: .normal)  }    if gameManager.studentPile.count == 0 {  studentTableCard.setImage(nil, for: .normal)  } else {  studentTableCard.setImage(gameManager.studentPile.last?.image, for: .normal)  }    if isPlayerOneTurn {  onePParent1.setImage(parentsOne.map({$0.image}).first!, for: .normal)  onePParent2.setImage(parentsOne.map({$0.image}).last!, for: .normal)  } else {  twoPParent1.setImage(parentsOne.map({$0.image}).first!, for: .normal)  twoPParent2.setImage(parentsOne.map({$0.image}).last!, for: .normal)  }  }   

Редактировать

Я не удаляю индекс, эта функция просто называется для обозначения определенной карты в позиции индекса массива.

Редактировать

Поэтому после еще более тщательного исследования я обнаруживаю, что при вызове функции из другого контроллера представления кнопки в моем массиве imagesAll не достигаются, они объявляются равными нулю. Почему мои IBOutlets объявлены равными нулю из другого контроллера вида?

Комментарии:

1. вам нужно разорвать цикл после удаления индекса

2. или, если вы удаляете несколько индексов одновременно, сначала измените массив индексов, который вы хотите удалить, и разорвите цикл после последнего удаления индекса

Ответ №1:

вы должны вызвать этот gameVC.removingCard(indexToRemove: индекс!), прежде чем уволить ваш ViewController.

Комментарии:

1. Это комментарий, а не ответ

2. Я пробовал это изначально, это не сработало, но сейчас я все равно напишу функцию перед увольнением

3. Как вы получаете индекс можете ли вы поделиться полным фрагментом своего кода?

4. Я отредактировал код, чтобы включить всю функцию, которая вызывает сбой, отмечена конкретная строка

5. Продолжая что-то пробовать, я заметил, что мой массив кнопок равен нулю вместо 7 IBOutlets, которые я объявил ранее. В то время как мои кнопки равны нулю, когда функция вызывается из другого контроллера представления?