ARQuicklook - фатальная ошибка: неожиданно обнаружен ноль при развертывании необязательного значения - PullRequest
0 голосов
/ 16 сентября 2018

Я следую этому руководству о том, как создать приложение AR Quicklook. Есть только несколько шагов, которые кажутся достаточно простыми. Однако на последнем шаге я получаю фатальную ошибку, потому что переменная let принудительно разворачивается. Я попытался сделать это необязательным, но я получаю разные ошибки, такие как:

Необязательная цепочка не имеет никакого эффекта, выражение уже производит 'URL?'

Если я удалю необязательный, я получу это предупреждение в следующей строке:

URL? не конвертируется в 'QLPreviewItem'; Вы хотели использовать «как!» заставить опуститься?

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

@IBOutlet var collectionView: UICollectionView!
let models = ["A", "B", "C", "D", "E"]

var thumbnails = [UIImage]()
var thumbnailIndex = 0

override func viewDidLoad() {
    super.viewDidLoad()
    for model in models {
        if let thumbnail = UIImage(named: "\(model).jpg") {
            thumbnails.append(thumbnail)
        }
    }

    collectionView.dataSource = self
    collectionView.delegate = self
    collectionView.reloadData()
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return models.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "LibraryCell", for: indexPath) as? LibraryCollectionViewCell

    if let cell = cell {
        cell.modelThumbnail.image = thumbnails[indexPath.item]
        let title = models[indexPath.item]
        cell.modelTitle.text = title.capitalized
    }

    return cell!
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    thumbnailIndex = indexPath.item

    let previewController = QLPreviewController()
    previewController.dataSource = self
    previewController.delegate = self
    present(previewController, animated: true)
}

func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
    return 1
}

func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
    let url = Bundle.main.url(forResource: models[thumbnailIndex], withExtension: "usdz")!
    return url as QLPreviewItem
}

1 Ответ

0 голосов
/ 16 сентября 2018

Этот

let url = Bundle.main.url(forResource: models[thumbnailIndex], withExtension: "usdz")!

может вернуть ноль, только если элемент не существует в основном Пакете или существует, но целевое членство не проверено, поэтому убедитесь, что все эти ресурсы существуют

A.usdz, B.usdz, C.usdz, D.usdz, E.usdz

, учебник показывает, что здесь

enter image description here

...