swift iOS中的表视图问题

时间:2015-05-27 07:53:43

标签: uitableview swift uisearchbar xcode6.3

我正在尝试创建一个表格视图,其中包含带有部分的菜肴列表,当我们选择一行时,它应该转到新的表格视图,其中包含供应特定食物的受欢迎餐馆列表。

我创建了包含部分的表格视图,但是当我到达列表视图的末尾时,我的应用程序崩溃了。我在下面添加了我的代码,其中包含表视图和错误的快照。

 @IBOutlet weak var dishtable: UITableView!

@IBOutlet weak var namlbl: UILabel!
var Dishes = ["POPULAR Dishes": ["Biryani", "Tandori Chicken","Butter Chicken", "Vada Pav"],"A": ["Aloo baingan", "Aloo ki Tikki", "Amritsari fish"], "B": ["Baigan bharta", "Biryani"]];


override func viewDidLoad() {
    super.viewDidLoad()
    self.dishtable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    dishtable.dataSource = self
     dishtable.delegate = self
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
override func prefersStatusBarHidden() -> Bool {
    return true
}

let sections:Array<AnyObject> = ["POPULAR Dishes","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
var usernames = [String]()

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

    let cellID = "cell"

    let cell: UITableViewCell = self.dishtable.dequeueReusableCellWithIdentifier(cellID) as! UITableViewCell
    println("value : \(indexPath.section)")
    println("value 1: \(indexPath.row)")

    cell.textLabel!.text = Dishes[sections[indexPath.section] as! String]![indexPath.row]

    return cell

}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
    println("Dishes section count : \(section)")

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

    return 27
}

func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

}


func tableView(tableView: UITableView,
    sectionForSectionIndexTitle title: String,
    atIndex index: Int) -> Int{

        return index
}

func tableView(tableView: UITableView,
    titleForHeaderInSection section: Int) -> String?{

        return self.sections[section] as? String
}

这是表格视图的截图。

Table view

当我向下滚动到表格视图的底部时,这是错误的屏幕截图。

error while scrolling down

这是同一错误控制台的屏幕截图。

error shown in the console

另请告知我们如何为表格视图添加搜索功能。

2 个答案:

答案 0 :(得分:4)

我认为你的问题在于:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
  println("Dishes section count : \(section)")

  return Dishes.count
}

您要为每个部分返回一个行数,但Dishes中的密钥B没有任何菜肴。 通常在numberOfRowsInSection委托方法中,您可以执行以下操作:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
  println("Dishes section count : \(section)")

  if section == 0 {
    return Dishes["POPULAR Dishes"].count
  }
  else if section == 1 {
    return Dishes["A"].count
  }
  return 0
}

显然你会想找到一个更好的方法来做到这一点,但我希望这会有所帮助。

答案 1 :(得分:4)

问题出在numberOfRowsInSection函数中。

在您的情况下numberOfSectionsInTableView = 27,因此您需要返回个人numberOfRowsInSection

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch section {
    case 0:
        return Dishes["POPULAR Dishes"].count
    case 1:
        return Dishes["A"].count
    case 2:
        return Dishes["B"].count

    // upto case 26      
    default:
        println("fetal error")
    }
    return 1
}