iOS/Xcode: платформа Koloda: неожиданно обнаружено значение nil при неявном развертывании необязательного значения

Я пытаюсь внедрить эту структуру Koloda в свое приложение. (https://github.com/Yalantis/Koloda). Однако когда я запускаю свое приложение, я получаю сообщение об ошибке в строкеkolodaView.delegate = self в котором говорится: "Неожиданно обнаружен nil при неявном развертывании необязательного значения"

Я часами пытался отладить код, но не мог понять, откуда берется значение nil. Вот мой файл контроллера представления ниже:

import UIKit
import Koloda
import pop

private let numberOfCards: Int = 5
private let frameAnimationSpringBounciness: CGFloat = 9
private let frameAnimationSpringSpeed: CGFloat = 16
private let kolodaCountOfVisibleCards = 2
private let kolodaAlphaValueSemiTransparent: CGFloat = 0.1

class CardViewController: UIViewController {
    
    @IBOutlet weak var kolodaView: CardView!
    //MARK: Lifecycle
    
    fileprivate var dataSource: [UIImage] = {
        var array: [UIImage] = []
        for index in 0..<numberOfCards {
            array.append(UIImage(named: "cards_\(index + 1)")!)
        }
        return array
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
//        kolodaView.alphaValueSemiTransparent = kolodaAlphaValueSemiTransparent
//        kolodaView.countOfVisibleCards = kolodaCountOfVisibleCards
        kolodaView.delegate = self
        kolodaView.dataSource = self
//        kolodaView.animator = BackgroundKolodaAnimator(koloda: kolodaView)
//        self.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
    }
    
    
//    //MARK: IBActions
//    @IBAction func leftButtonTapped() {
//        kolodaView?.swipe(.left)
//    }
//
//    @IBAction func rightButtonTapped() {
//        kolodaView?.swipe(.right)
//    }
//
//    @IBAction func undoButtonTapped() {
//        kolodaView?.revertAction()
//    }
}

//MARK: KolodaViewDelegate
extension CardViewController: KolodaViewDelegate {
    
    func kolodaDidRunOutOfCards(_ koloda: KolodaView) {
        kolodaView.resetCurrentCardIndex()
        kolodaView.reloadData()
    }
    
    func koloda(_ koloda: KolodaView, didSelectCardAt index: Int) {
        let myUrl = "https://yalantis.com/"
        if let url = URL(string: "\(myUrl)"), !url.absoluteString.isEmpty {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        }
    }
    
    func kolodaShouldApplyAppearAnimation(_ koloda: KolodaView) -> Bool {
        return true
    }

    func kolodaShouldMoveBackgroundCard(_ koloda: KolodaView) -> Bool {
        return false
    }

    func kolodaShouldTransparentizeNextCard(_ koloda: KolodaView) -> Bool {
        return true
    }

    func koloda(kolodaBackgroundCardAnimation koloda: KolodaView) -> POPPropertyAnimation? {
        let animation = POPSpringAnimation(propertyNamed: kPOPViewFrame)
        animation?.springBounciness = frameAnimationSpringBounciness
        animation?.springSpeed = frameAnimationSpringSpeed
        return animation
    }
}

// MARK: KolodaViewDataSource
extension CardViewController: KolodaViewDataSource {
    
    func kolodaSpeedThatCardShouldDrag(_ koloda: KolodaView) -> DragSpeed {
        return .default
    }
    
    func kolodaNumberOfCards(_ koloda: KolodaView) -> Int {
        return numberOfCards
    }
    
    func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
        return UIImageView(image: UIImage(named: "cards_\(index + 1)"))
    }
    
//    func koloda(_ koloda: KolodaView, viewForCardOverlayAt index: Int) -> OverlayView? {
//        return Bundle.main.loadNibNamed("CustomOverlayView", owner: self, options: nil)?[0] as? OverlayView
//    }
 }

Если бы кто-нибудь мог указать, как self.delegate возвращает ноль, это будет оценено.

1 ответ

В ошибке четко указано, что что-то равно нулю, и вы не можете принудительно развернуть эту строку:

kolodaView.delegate = self

Здесь явно только kolodaViewможет привести к краху. Это означает, что в следующей строке потеряна связь с раскадровкой. Подключитесь кkolodaView в раскадровке в следующей строке.

@IBOutlet weak var kolodaView: CardView!
Другие вопросы по тегам