UITableView错误:indexpath.row从1而不是0开始

时间:2015-09-03 07:43:01

标签: ios swift uitableview

indexpath.row从1而不是0开始。

如何摆脱空索引0?

{{1}}

以下是文本文件读取内容及其在tableview上的显示方式的屏幕截图

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

这种行为是正常的,来自componentsSeparatedByString类的NSString文档:

  

<强>讨论
  数组中的子串按接收器中的顺序显示。相邻的分隔符字符串出现在结果中产生空字符串。 同样,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。例如,此代码片段:

     

NSString *list = @"Karin, Carrie, David"; NSArray *listItems = [list componentsSeparatedByString:@", "];
  产生一个阵列{@“Karin”,@“Carrie”,@“David”“}。

     

如果list以逗号和空格开头,例如@“,Norman,Stanley,Fletcher” - 数组包含以下内容:{@“”,@“Norman”,@“ Stanley“,@”Fletcher“}

     

如果list没有分隔符 - 例如,“Karin” - 数组包含字符串本身,在本例中为{@“Karin”}。

您的文本文件以分隔符开头,因此空字符串是数组的第一项。

编辑:

解决方案就是删除第一项:

class ViewController: UITableViewController {

  var tableData = [String]()

  override func viewDidLoad() {
    super.viewDidLoad()

    if let path = NSBundle.mainBundle().pathForResource("textFile", ofType: "txt"),
      data = String(contentsOfFile:path, encoding: NSUTF8StringEncoding, error: nil) {
        tableData = data.componentsSeparatedByString("#")
        tableData.removeAtIndex(0)
    }
  }
}
...

答案 1 :(得分:0)

更新 在这里,我只更改了一行,其他与您的代码相同 我注意到你的源文件可能在最顶部包含空行,这导致第一个单元格为空!

//  tab.swift
//  TestGround
//
//  Created by dip on 9/3/15.
//  Copyright (c) 2015 apple. All rights reserved.
//

import UIKit

class tab: UITableViewController {

    var path: String?
    var data: String?
    var TableView1:[String] = [] //Changed this line
    var TableView2 = [String]()


    override func viewDidLoad() {
        super.viewDidLoad()

        self.path = NSBundle.mainBundle().pathForResource("dip", ofType: "txt")
        self.data = String(contentsOfFile:path!, encoding: NSUTF8StringEncoding, error: nil)
        if var content = (data){
            //var line: [String] = content.componentsSeparatedByString("\n")
            var chp: [String] = content.componentsSeparatedByString("\n")

            TableView1 += chp
            TableView1 += chp
        }

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        println("count is \(self.TableView1.count)")
        return TableView1.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var Cell = self.tableView.dequeueReusableCellWithIdentifier("cel", forIndexPath: indexPath) as! TableViewCell //little change but will not effect

            var text = TableView1[indexPath.row] as String //just created a variable of string
            println(text)

        Cell.textLabel?.text = text // added text to label



        return Cell
    }

}