【问题标题】:Why is this out of index?为什么这超出了索引?
【发布时间】:2017-02-26 21:23:37
【问题描述】:

我试图从我的视图控制器中调用一个数组,然后从该数组中设置包含对象的文本。但是当我执行 segue 时,它​​只会给我一个“超出范围的索引”,我看不出我做错了什么。我也尝试过使用自我。通话中到处都是,但这似乎不是问题所在。

变量电影是我尝试从数组中仅获取 1 部电影的地方,但同样的问题仍然存在。我的视图控制器做错了什么还是需要传入一个值?

Detailsviewcontroller 是新视图和 tableview 的控制器,这就是我在文件中创建另一个类的原因。

文件:DetailsviewController

import UIKit
class DetailsViewController: UIViewController, UITableViewDataSource,UITabBarDelegate { 

    @IBOutlet weak var tableView: UITableView!



    var mainController = ViewController()

    var movie = ViewController().self.movieArray[0]





    var titles = ["Title", "Release Date","Genres","OverView"]



    override func viewDidLoad() {
        super.viewDidLoad()
        print(movie)
        // Do any additional setup after loading the view.
    }



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return titles.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DetailsCustomcell

        cell.detailTitle.text = titles[indexPath.row]
        if indexPath.row == 0{
        cell.detailContent.text = ""
        }
        if indexPath.row == 1{
            cell.detailContent.text = ""
        }
        if indexPath.row == 2{
            cell.detailContent.text = "Movie genre´s is not fixed yet"
        }
        if indexPath.row == 3{
            cell.detailContent.text = ""
        }
            return cell
    }





    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}
class DetailsCustomcell: UITableViewCell{

    @IBOutlet weak var detailTitle: UILabel!

    @IBOutlet weak var detailContent: UILabel!

}

【问题讨论】:

  • 认为ViewController() 的两个实例彼此不同,并且与storyboard 或xib 中的ViewController 实例不同。那就是问题所在。您需要对视图控制器的实际引用。
  • var mainController = ViewController() 的行是什么?它似乎未使用,ViewController 类是什么? var movie = ViewController().self.movieArray[0] 试图做什么?我猜这是导致问题的行,但要清楚,请指出导致异常的行并将 full 错误消息添加到您的问题中。

标签: ios arrays swift segue


【解决方案1】:

不确定这是什么:

var mainController = ViewController()
var movie = ViewController().self.movieArray[0]

无论如何,ViewController() 都会实例化该类的新对象。此时,movieArray 很可能从未被初始化并且其中没有对象。

【讨论】:

  • 啊哈,没想到!那么我如何专门引用视图控制器呢?
  • 这真的取决于。但我的问题首先是为什么你需要从这个视图控制器的属性中获取“电影”,而不是从填充 movieArray 的任何数据源开始?
  • 我需要这部电影的原因是因为我想读取数组的内容。 “电影”变量只是我正在测试的东西。我的 viewcontroller.swift 中有一个movieArray,我在其中执行获取请求,然后用movieobjects 填充我的movieArray。当电影被点击时,我希望显示该特定电影的详细信息。
  • 搜索将数据从主视图传递到详细视图的方法。你会得到更多的教程和答案,然后你就会知道该怎么做。示例:stackoverflow.com/questions/28430663/…
  • 非常感谢!
猜你喜欢
  • 2020-10-19
  • 2016-08-22
  • 2015-11-05
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
相关资源
最近更新 更多