由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:indexPath!= nil”

Posted

技术标签:

【中文标题】由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:indexPath!= nil”【英文标题】:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: indexPath != nil' 【发布时间】:2018-12-10 17:08:43 【问题描述】:

我正在尝试将我的 collectionView 转换为 IGListKit CollectionView。我收到错误:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: indexPath != nil'

这里是包含 collectionView 的 viewController 代码:

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 类和 nib 在普通的 collectionView 中都可以工作

【问题讨论】:

究竟是哪一行导致了错误? 控制台中出现错误,因此不确定它在哪一行。但是,线程 1:信号 SIGABRT 错误出现在定义类的行的 AppDelegate 中。我觉得这可能是由于我的 nib 文件。 设置异常断点以获取更多信息 @vadian 断点首先转到应用程序委托“线程 1:信号 SIGABRT”。然后转到第 64 行: IGParameterAssert(indexPath != nil);出现错误“线程 1:断点 1.1”此行位于 IGListDisplayHandler 文件中名为“didEndDisplayingReusableView”的方法中 看来是断言失败 【参考方案1】:

是因为你的UICollectionViewLayout 应该是UICollectionViewFlowLayout

【讨论】:

以上是关于由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:indexPath!= nil”的主要内容,如果未能解决你的问题,请参考以下文章

目标 C:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序

由于未捕获的异常而终止应用程序 [UIImageView _isResizable]

由于未捕获的异常而终止应用程序,同时加载视图

由于未捕获的异常“NSInternalInconsistencyException”错误而终止应用程序

“由于未捕获的异常而终止应用程序”在推送视图控制器时崩溃

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,