Xcode Swift:致命错误:索引超出范围

Posted

技术标签:

【中文标题】Xcode Swift:致命错误:索引超出范围【英文标题】:Xcode Swift: Fatal error: Index out of range 【发布时间】:2019-08-25 01:26:50 【问题描述】:

首先,我已经检查了有关此致命错误的所有其他问题,我的问题与其他问题不同。

import Firebase

var tappedUserController = TappedUserController()

class TappedUserController: UIViewController 

    @IBOutlet weak var tappedName: UILabel!
    @IBOutlet weak var tappedSport: UILabel!
    @IBOutlet weak var tappedZip: UILabel!
    @IBOutlet weak var tappedPhone: UILabel!
    @IBOutlet weak var tappedEmail: UILabel!

    override func viewDidLoad() 
        super.viewDidLoad()

        let peopleView = PeopleViewController()

        let number = myIndex
        print(number)

        let tappedRow = peopleView.people[number]

        print(tappedRow)

        let tappedUser = FirebaseFirestore.root.collection("users").document()


override public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    myIndex = indexPath.row

    print(myIndex)
    print(people[0])

    performSegue(withIdentifier: "toTappedUser", sender: self)

0 人(姓名:“Test1”,邮编:“95111”,运动:“网球”,电子邮件:“test1@email.com”) 0 致命错误:索引超出范围 2019-08-24 18:12:25.041506-0700 Sports Partner[29777:4579375] 致命错误:索引超出范围 (lldb)

我正在尝试制作一个关于用户和运动的应用。在右侧(或代码的第二部分),当使用didSelectRowAt 时,应该已经将myIndex 变为indexPath.row。因此,如果我在运行应用程序时点击第一行,它应该让 myIndex 等于 0

打印myIndex时,也会输出0

现在,当我打印 people[0](应该与 people[myIndex] 相同)时,它会输出我希望它输出的内容,即该特定行的数据。

然后,使用performSegue,它转到下一个视图控制器,其类位于左侧(或第一段代码)。我试图让另一个变量(数字)等于myIndex,但它不会改变输出。

打印number,它再次输出0。但是当我得到公共类peopleView和公共数组peoplepeopleView.people[number]时,错误

致命错误:索引超出范围

发生。

我很困惑为什么会发生这种情况,因为打印people[0] 应该与打印people[myIndex] 相同。有人可以解释为什么会这样吗?

编辑

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    guard let TappedUserController = segue.destination as? TappedUserController,
        let index = tableView.indexPathForSelectedRow?.row
        else 
            return
    
    tappedUserController.selectedPerson = people[myIndex]

【问题讨论】:

@Sweeper,附有一张图片。它在您的屏幕上不可见吗? 啊哎呀!我忘了打开我的***。无论如何,您都不应该将代码发布为图像。代码是文本,应该这样发布。 @Sweeper,抱歉,我现在就编辑它。 在 viewDidLoad 中你设置了number = myIndexmyIndex 似乎没有在那个时候定义。但是,我希望这会显示编译器错误。 也许可以尝试使用an extension such as this,这样您就可以在不崩溃和烧毁的情况下捕获错误。 【参考方案1】:

这是一个非常常见的错误。问题是let peopleView = PeopleViewController() 行。

它返回一个全新的控制器实例,它不是故事板中的实例。您需要通过故事板中的 segue 或实例化对控制器的真实引用。

【讨论】:

您好,谢谢。我刚刚看了如何引用场景并在这里找到了解决方案:***.com/questions/48927609/….

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

如何解决问题 UIPickerView 致命错误:索引超出范围 [IOS Swift 5.1 Xcode 11.2]

Swift 致命错误:数组索引超出范围

Swift 致命错误:数组索引超出范围

致命错误:索引超出范围:Swift

(Swift) 致命错误:索引超出范围

Swift TableView ImageView + Label = 致命错误:索引超出范围