致命错误:注册后索引超出范围(Firebase、Swift)

Posted

技术标签:

【中文标题】致命错误:注册后索引超出范围(Firebase、Swift)【英文标题】:Fatal error: Index out of range after Sign Up (Firebase, Swift) 【发布时间】:2018-03-18 16:12:40 【问题描述】:

我正在尝试学习如何使用 Firebase,但在我的项目中包含 Firebase 后,我遇到了数组问题(没有注册 + 登录功能,我的代码可以正常工作)。

我有一个class New,其结构如下:

class New 


 struct collectViewStruct 
        var image = [UIImage]()
    

    var collectImageArray = [
        collectionViewStruct(image: [UIImage(named:"maskarad.jpg")!, UIImage(named:"2.jpg")!]),
        collectionViewStruct(image: [UIImage(named:"3.jpg")!, UIImage(named:"4.jpg")!]),
        collectionViewStruct(image: [UIImage(named:"5.jpg")!, UIImage(named:"6.jpg")!])

    ]

    var anImageArray = [
        collectionViewStruct(image: [UIImage(named:"1.jpg")!, UIImage(named:"2.jpg")!, UIImage(named:"3.jpg")!, UIImage(named:"4.jpg")!, UIImage(named:"5.jpg")!]),
        collectionViewStruct(image: [UIImage(named:"3.jpg")!, UIImage(named:"4.jpg")!]),
        collectionViewStruct(image: [UIImage(named:"5.jpg")!, UIImage(named:"6.jpg")!])

    ]

    var detImageArray = [
        collectionViewStruct(image: [UIImage(named:"1.jpg")!, UIImage(named:"2.jpg")!]),
        collectionViewStruct(image: [UIImage(named:"3.jpg")!, UIImage(named:"4.jpg")!]),
        collectionViewStruct(image: [UIImage(named:"5.jpg")!, UIImage(named:"6.jpg")!])
    ]

    struct nVoiceStruct 
        var nVoice = [Int]()
    

    var vlVoiceArray = [
        nVoiceStruct(nVoice: [0, 1])
    ]


我有一个CollectionViewController,我正在尝试将来自CollectionViewController 视图的数据连接到我的下一个MediaViewController

import UIKit

    var aArray = [UIImage]()
    var dArray = [UIImage]()
    var vArray = [Int]()

    class CollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 
        var cats : New = New()

         func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 

            selectedRow = indexPath.row

            let selectedItemInCategoryArray = cats.anImageArray[selectedRow]
            aArray = selectedItemInCategoryArray.image

            let selectetItemVoice = cats.vlVoiceArray[selectedRow]
            vArray = selectetItemVoice.nVoice


            let selectedItemInArray = cats.collectImageArray[selectedRow]
            dArray = [selectedItemInArray.image[selectedRow]

        

但在我的第三个 MediaViewController 中,我有一个空数组

 aArray[4] = dArray[0]
Thread 1: Fatal error: Index out of range

没有 Firebase 一切正常,但登录后,我有一个空数组。不知道哪里出了问题。我想可能是因为我的变量在类之外,但是当我在类内初始化它们时,它没有帮助。如果有人能解释它,我将不胜感激(我的类和变量的名称只是草稿)。

这是日志消息:

2018-03-18 23:03:18.242863+0300 Newapp [Firebase/Analytics] Firebase Analytics started
2018-03-18 23:03:18.243474+0300 Newapp [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see ...)
2018-03-18 23:03:18.677132+0300 Newapp TIC Read Status [1:0x0]: 1:57
2018-03-18 23:03:18.680586+0300 Newapp TIC Read Status [1:0x0]: 1:57
2018-03-18 23:03:18.938133+0300 Newapp[MC] System group container for systemgroup.com.apple.configurationprofiles path is (here is path)
2018-03-18 23:03:18.941294+0300 Newapp[56497:1489902] [MC] Reading from private effective user settings.

【问题讨论】:

看起来您正在将aArray 设置为在您的didSelectItemAt 函数中有一个值。我也想知道你如何从你的 collectionView 转到 MediaViewController?那个代码在哪里? @Jake 我从collectionView 到MediaViewControllerdidSelectItemAtsegue 没有代码(使用故事板),我有收集视图(宠物类别),在下一个MediaViewController 我我正在尝试将数组的一个元素替换为另一个,但是在我包含 Firebase 之后,所有数组 (aArray, vArray, dArray) 都是空的。当我删除 FirebaseAuth 代码时,所有其他代码都会再次运行 @Jake 这是我的文件link 将此代码添加到您的 MediaViewController viewDidLoad 并注释掉您拥有的所有其他内容 if let testArray = aArray print(aArray) else print("aArray is nil") 让我知道打印的内容 @Jake 它不打印任何东西,控制台是空的,只有 lldb 和 Fatal error: Index out of range。当我从环境变量中删除 OS_ACTIVITY_MODE 时,我在控制台 Reading from private effective user settings 上收到了这条消息 【参考方案1】:

我尝试了这些步骤:

    转到我的Main.storyboard 选择我的MediaViewController -> Editor -> Embeded in Navigation Controller

它解决了问题

【讨论】:

以上是关于致命错误:注册后索引超出范围(Firebase、Swift)的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:索引超出范围,同时在 SwiftUI 的列表中从 Firebase 中删除项目

致命错误:索引超出范围的 tableview 有两个部分

从firebase删除时数组索引超出范围

辅助选择器的“ForEach”给了我致命错误:索引超出范围

准备转场时致命错误索引超出范围

索引超出范围的 SwiftUI 问题