Swift:如何填充UITableView

时间:2016-10-13 21:00:50

标签: swift xcode uitableview nsmutabledictionary tableviewcell

我试图将函数get()的结果传递给tableview。这个函数里面的结果来自Http post。所以我正在使用nsmutableurl等。我得到的数据可以在我的输出控制台中看到,现在想要在我的tableview上。我怎么能这样做?

我有这堆代码,我设法获取数据(可以在我的输出控制台中看到),现在我正在尝试在表视图上加载这些数据。如何在表格中传递这些数据?

    func get(){

        let request = NSMutableURLRequest(URL: NSURL(string: "http://myurl/somefile.php")!)
        request.HTTPMethod = "POST"
        let postString = "id=\(cate_Id)"
        request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in

            guard error == nil && data != nil else {                                                          // check for fundamental networking error
                print("error=\(error)")
                return
            }

            if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {           // check for http errors
                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print("response = \(response)")
            }

            let responseString = String(data: data!, encoding: NSUTF8StringEncoding)
            print("responseString = \(responseString)")
        }
        task.resume()
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        i need the count of the rows here
    }



    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        land want to display the data inside each cell

    }

1 个答案:

答案 0 :(得分:0)

由于您没有提供有关HTTP请求结果的任何信息,我试图以“一般方式”回答您。

通常,您会得到一个响应,作为所需数据的字典数组。为了方便起见:假设您要求Strings,那么您必须这样做:

let myStringArray: [String] = []

在您的HTTP响应块中,您会收到回复,请注意!此代码完全取决于您的响应树。我不知道你的反应是什么,因为你没有提供它。

        if let JSON = response.result.value {

            let myString = String((JSON.valueForKey("stringWithinMyResonseTree"))!)
            myStringArray.append(myString)

            self.tableView.reloadData()
        }

然后你的行数为:

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

在Cell上,它取决于你想用它做什么。如果你的Cell中有一个Label,并希望在其上显示String的值,你可以创建一个UITableViewCell子类并调用它,例如MyCell。在MyCell中,您可以像这样创建标签的插座:

class MyCell: UITableViewCell {

    @IBOutlet weak var myLabel: UILabel!

然后你需要返回你的UITableView子类并使用所需的String填充Label。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("MyCell") as! MyCell
        let string = myStringArray[indexPath.row]
        cell.myLabel.text = string

        return cell

}

不要忘记在Interface Builder属性中设置Cell标识符。

您的请求需要一个包含一个Dictionary的数组,但您将其转换为String。因此,请使用以下内容代替您的get()功能:

func download() {
    let requestURL: NSURL = NSURL(string: "http://myurl/somefile.php")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) {
        (data, response, error) -> Void in

        let httpResponse = response as! NSHTTPURLResponse
        let statusCode = httpResponse.statusCode

        if (statusCode == 200) {
            print("Everyone is fine, file downloaded successfully.")

            do{

                let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)

                let grouID = String(json.valueForKey("group_id"))
                let name = String(json.valueForKey("NAME"))

                print("grouID = \(grouID)")
                print("name = \(name)")
                print("debug: this code is executed")

            }catch {
                print("Error with Json: \(error)")
            }

        }
    }

    task.resume()
}

要调试您的问题,请创建一个例外断点:

enter image description here