使用plist填充UITableView

时间:2014-06-07 13:20:06

标签: uitableview plist swift

我正试图让一个plist来填充uitableview

plist看起来像这样: enter image description here

我遇到问题的代码:

class GravidMenu: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet
var tableView: UITableView
var dict = NSMutableArray(contentsOfFile: NSBundle.mainBundle().pathForResource("links", ofType: "plist"))
var txt : NSString = dict.valueForKey("menuPunkt") as NSString //this throws a error : GravidMenu.Type does not have a member named dict


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

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
    if let row = indexPath?.row {

        cell.textLabel.text = self.txt[row] // throws a error Nsstring does not have a a member named subscript
        println("Text \(txt)")
    }

    return cell
}

似乎我越来越近了。


更新

显示完整代码 调整cell.label和var txt。还将一些代码移动到viewDidLoad,这看起来似乎已经打破了

import UIKit
import Foundation


class GravidMenu: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet
var tableView: UITableView

override func viewDidLoad() {
    super.viewDidLoad()
    var dict = NSMutableArray(contentsOfFile: NSBundle.mainBundle().pathForResource("links", ofType: "plist"))
    var txt : NSArray = dict.valueForKey("menuPunkt") as NSArray

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

}


func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
    return self.dict.count; // Throws Error GravidMenu does not have a member named dict
}

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
    if let row = indexPath?.row {

        cell.textLabel.text = "\(txt.objectAtIndex(indexPath.row))"
        println("Text \(txt)")
    }

    return cell
}

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    println("You selected cell #\(indexPath.row)!")
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

更新

let dict : NSMutableArray! = NSMutableArray(contentsOfFile: NSBundle.mainBundle().pathForResource("links", ofType: "plist"))
var txt : NSArray! = dict?.valueForKey("menuPunkt") as? NSArray!
这是给我带来麻烦的。它一直在说var txt行中的“GravidMenu没有名为dict的成员”......有人吗?帮助

1 个答案:

答案 0 :(得分:2)

所有这些代码都粘贴在viewDidLoad:

var dict : NSMutableArray = NSMutableArray(contentsOfFile: NSBundle.mainBundle().pathForResource("links", ofType: "plist"))
var txt : NSString = dict!.valueForKey("menuPunkt") as NSString

我会搜索您需要在viewDidLoad中写入的原因。

我建议你加一个问号,因为你不知道它是否为零,(如果找不到文件)

也是dict!。

希望我帮助过。)

<强>更新

    let dict : NSMutableArray! = NSMutableArray(contentsOfFile: NSBundle.mainBundle().pathForResource("links", ofType: "plist"))

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    var txt : NSString = dict!.valueForKey("menuPunket") as NSString;
}


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

现在为我工作。