无法访问UITableviewcontroller swift中函数外部声明的变量

时间:2015-08-16 17:28:26

标签: swift uitableview variables scope

我正在使用一个简单的UITableViewController

 import UIKit
 import Alamofire


 class TableViewController: UITableViewController, UITableViewDataSource,             UITableViewDelegate {

struct ListItem {
    var Name:String = ""
    var Number:String = ""
    var Email:String = ""
}


override func viewDidLoad() {
    super.viewDidLoad()
    getjsonData()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

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

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
   // return controlstaticdata.count
   // return controlListData.controlListItems.count
    return testdata.count
}

   var testdata = [String]()


    func getjsonData(){

     var jsondata:NSData!

    let url = "http://localhost:3000/controllistapp"

    Alamofire.request(.GET, url).responseJSON(){
        (_,_,data,_) in
        println(data)

    // parse the jsondata returned by Alamofire .GET request

    let json = JSON(data!)
    var i = 0
    for(_, subJson): (String, JSON) in json {
        if let Name = subJson["Name"].string,
            let Number = subJson["Number"].string,
            let Email = subJson["Email"].string{
                var item = ListItem(Name: Name, Number: Number, Email: Email)
                self.testdata += [Name]

        }

    }
}

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("controlcell", forIndexPath: indexPath) as! TableViewCell

    // Configure the cell...
    cell.clabel.text = self.testdata[indexPath.row]
    return cell
} 
}

testdata在函数外声明。 testdata也是从另一种方法填充的。

问题是:当我放置断点并检查数据时,self.testdata没有显示数据。 我在swift中正确使用变量吗?

在此处添加完整代码:

{{1}}

getjsonData中self.testdata + = [Name]行的断点显示正在填充的数据。 但是,tableView函数中的cell.clabel.text = self.testdata [indexPath.row]行的断点显示没有数据并引发异常。

1 个答案:

答案 0 :(得分:0)

我认为您的问题是您在将数据填充到数组后忘记包含self.tableView.reloadData()