无法使用索引类型[NSIndexPath] - prepareForSegue下标类型为[String]的值

时间:2015-12-19 17:30:09

标签: arrays swift uitableview nsindexpath

我尝试使用prepareForSegue函数从UITableView向另一个UITableView发送多行。

当我向第二个UITableView发送一个选项时,该应用程序运行正常,但是当我选择多行并将其作为标题发送到第二个UITableView时(例如,如果我先点击&# 34; a"行,然后" d"行然后" c"行...第二个UITableView只显示行" c" as a标题,而不是其他2行),它给出了一个错误。

错误的图片:

enter image description here

这些是我为第一个UITableView编写的行:

let array = ["a", "b", "c", "d", "e"]

@IBOutlet var initialTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initialTableView.allowsMultipleSelection = true
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "segueA" {
        if let destination = segue.destinationViewController as? Content {
            if let selectedRows = initialTableView.indexPathsForSelectedRows {
                destination.title = array[selectedRows]
            }
        }
    }
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.array.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cellA", forIndexPath: indexPath) as UITableViewCell
    cell.textLabel!.text = array[indexPath.row]
    return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
    let cell = tableView.cellForRowAtIndexPath(indexPath)
    if (cell?.accessoryType == UITableViewCellAccessoryType.Checkmark) {
        cell!.accessoryType = UITableViewCellAccessoryType.None
    } else {
        cell!.accessoryType = UITableViewCellAccessoryType.Checkmark
    }
}

第二个视图包含以下行:

var contentArray:[String] = []

@IBOutlet var contentTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    contentArray.append(title!)
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return contentArray.count
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 2
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellContent = tableView.dequeueReusableCellWithIdentifier("cellContent", forIndexPath: indexPath) as UITableViewCell
    cellContent.textLabel!.text = "Second test"
    return cellContent
}

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return contentArray[section]
}

所以,如果我想选择多行并从第一个到第二个UITableView发送这些...我该如何解决这个错误?

感谢。

1 个答案:

答案 0 :(得分:1)

您的问题是selectedRows是一个NSIndexPath的数组。您不能使用它来索引您的数组。您需要将String的数组传递给第二个视图控制器,而不是仅设置一个字符串。

使用maparray中选择要传递到目标viewController的contentArray属性的字符串:

destination.contentArray = selectedRows.map { array[$0.row] }

您需要为destination.title确定新的合理设置。

您需要从viewDidLoad

中删除此行
contentArray.append(title!)