У меня есть модальное представление (сделанное в раскадровке) с именем CloseFriendsController
с кнопкой, которая должна добавить текущего пользователя в список в Firebase под названием closeFriends
, а затем закрыть модальное представление.Я создал функцию в CloseFriendsController
и вызывал ее при нажатии кнопки:
var buttonFunc: (() -> (Void))!
@IBAction func addToCloseFriends(_ sender: UIButton) {
buttonFunc()
self.presentingViewController?.dismiss(animated: true, completion: nil)
print("Added to Close Friends!")
}
func setFunction(_ function: @escaping () -> Void) {
self.buttonFunc = function
}
Это CloseFriendsController (кнопка «Да, я не в порядке!» Связана с функцией addToCloseFriends
):
Функция установлена в cellForItemAt indexPath
ячейки, в которой должен отображаться текущий пользователь:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let closeFriends = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
let closeFriendsController = CloseFriendsController()
closeFriendsController.setFunction {
let id = CloseFriendsSystem.system.friendList[indexPath.row].uid
CloseFriendsSystem.system.addCurrentUserToFriendsCloseFriendsLists(id)
print("currentUser added to Friends' Close Friends list!!")
}
return closeFriends
}
Оператор print("Added to Close Friends!")
печатается, когда buttonFunc()
закомментирован, но строка buttonFunc()
вызывает сбой приложения с предупреждением:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
Я создал функцию под названиеми установить его таким же образом несколько раз до.Однако в этих случаях кнопка, которая вызывала функцию, находилась внутри ячейки, на которую ссылалась cellForItemAt indexPath
.Из-за этого, я думаю, мне нужно найти другой способ для вызова indexPath?Но я не знаю, как мне поступить.
Я попытался создать делегат с функцией, которая заставила бы функцию buttonFunc
быть создана в том же контроллере, где она установлена.Тем не менее, функция в другом контроллере никогда не вызывалась.
Я действительно застрял здесь, поэтому любая помощь будет удивительной !!