Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Неправильный параметр не удовлетворяет: indexPath! = Nil» - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь преобразовать свой collectionView в IGListKit CollectionView.Я получаю ошибку: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: indexPath != nil'

вот код viewController, который содержит collectionView:

import UIKit
import IGListKit
import Firebase
import SAMCache

class NewHomeViewController: UIViewController {

    @IBOutlet weak var collectionView: UICollectionView!

    var sectionCategories: [String] = ["Friends Lists", "Friends", "People"]
    var lists = [Media]()

    lazy var adapter: ListAdapter = {
        return ListAdapter(updater: ListAdapterUpdater(), viewController: self, workingRangeSize: 0)
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.collectionView.collectionViewLayout = UICollectionViewLayout()
        adapter.collectionView = collectionView
        adapter.dataSource = self

        // check if the user logged in or not
        Auth.auth().addStateDidChangeListener { (auth, user) in
            if let user = user {
                // signed in

                WADatabaseReference.users(uid: user.uid).reference().observeSingleEvent(of: .value, with: { (snapshot) in
                    if let userDict = snapshot.value as? [String : Any] {
                        self.currentUser = User(dictionary: userDict)
                        print("user is signed in2")
                        //load the media
                        if self.currentUser != nil {
                            DispatchQueue.main.async {
                                self.observeMedia()
                            }
                        }
                    }
                })
                print("user is signed in")
            } else {
                print("user is not signed in")
                self.performSegue(withIdentifier: Storyboard.showWelcome, sender: nil)

            }
        }
    }

    func observeMedia() {
        Media.observeNewMedia { (media) in
            print("observed")
            if !self.lists.contains(media) {
                self.lists.insert(media, at: 0)
                print("adding")
                print("\(self.lists.count)")
                self.adapter.performUpdates(animated: true, completion: nil)
            }
        }
    }
}

extension NewHomeViewController: ListAdapterDataSource {
    func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
        let feedItems: [ListDiffable] = lists
        return feedItems
    }
    func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
        return postSectionController()
    }
    func emptyView(for listAdapter: ListAdapter) -> UIView? {
        let view = UIView()
        view.backgroundColor = .red
        return view
    }
}

и мой postSectionController

import UIKit
import IGListKit

class postSectionController: ListSectionController {
    var list: Media!
}

extension postSectionController {
    override func numberOfItems() -> Int {
        return 1
    }
    override func sizeForItem(at index: Int) -> CGSize {
        return CGSize(width: 158, height: 203)
    }
    override func cellForItem(at index: Int) -> UICollectionViewCell {

        print("got to cell for item")
        let cell = collectionContext?.dequeueReusableCell(withNibName: "HomeListsCollectionViewCell", bundle: nil, for: self, at: index) as! HomeListsCollectionViewCell

        cell.media = list
        return cell
    }
    override func didUpdate(to object: Any) {
        list = object as? Media
    }
    override func didSelectItem(at index: Int) {

    }
}

Я действительноне понимаю, почему эта ошибка происходит.Массив lists не пуст, и collectionViewCell печатает информацию из ячейки консоли, поэтому я знаю, что объект (Media) тоже не пустой.Я впервые использую IGListKit, поэтому не знаю, что я пропустил.Кто-нибудь может помочь?

Я попытался изменить свой collectionView на обычный вид с классом IGListCollectionView, но это выдает ту же ошибку, что и заголовок.Мой класс UICollectionViewCell и перо работают как в обычном collectionView

1 Ответ

0 голосов
/ 26 февраля 2019

Это потому, что ваш UICollectionViewLayout должен быть UICollectionViewFlowLayout.

...