Xcode 在swift中填充tableview

Xcode 在swift中填充tableview,xcode,uitableview,swift,tableview,nstableview,Xcode,Uitableview,Swift,Tableview,Nstableview,我在解析XML结果后得到了这个结果 当我做一个println()时,我得到的结果就像这样 { description = "Suzuki SX4 - BB71521"; deviceID = 359710042040320; } { description = "Chevrolet Tahoe Noir - Demonstration"; deviceID = 359710042067463; } { description = "Isuzu D'Max AA-08

我在解析XML结果后得到了这个结果

当我做一个
println()
时,我得到的结果就像这样

{
   description = "Suzuki SX4 - BB71521";
   deviceID = 359710042040320;
}
{
   description = "Chevrolet Tahoe Noir - Demonstration";
   deviceID = 359710042067463;
}
{
   description = "Isuzu D'Max AA-08612";
   deviceID = 359710042091273;
}
{
   description = "Toyota 4 Runner";
   deviceID = 359710042110768;
}
但是当我试图在一个带有两个单元格的
UITableView
中解析相同的结果时,
UITableView
显示为空

请帮助我只填充表

这是我的密码

import UIKit

class mtTableViewController: UITableViewController, NSXMLParserDelegate {

var info = NSDictionary();
var parser = NSXMLParser()
var posts = NSMutableArray()
var elements = NSMutableDictionary()
var element = NSString()

override func viewDidLoad()
{
    super.viewDidLoad() 
    self.beginParsing()                                                                                                                                                                                                                       
}

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

func beginParsing()
{

    let url = NSURL(string: "http://localhost:8080")
    var auth =

    "<GTSRequest command=\"dbget\">" +
        "<Authorization account=\"" + "easytrucking" + "\" user=\"" + "admin" + "\" password=\"" + "T8095634934ht" + "\"/>" +
        "<Record table=\"Device\" partial=\"true\">" +
        "<Field name=\"accountID\">" + "easytrucking" + "</Field>" +
        "<Field name=\"description\"/>" +           
        "</Record>" +
    "</GTSRequest>";

    //   "<Authorization account=\"" + txtAccount.text + "\" user=\"" + txtUserName.text + "\" password=\"" + txtPassword.text + "\"/>" +

    let request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "POST"
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    let data : NSData = (auth).dataUsingEncoding(NSUTF8StringEncoding)!;
    request.HTTPBody = data;
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
  /// println(NSString(data: data, encoding: NSUTF8StringEncoding))

      let xml = SWXMLHash.parse(data)

        let count = xml["GTSResponse"]["Record"].all.count

        for var i = 0; i < count; i++
        {

            if (xml["GTSResponse"]["Record"][i]["Field"][1].element?.attributes["name"] == "deviceID")
            {

                self.elements.setObject((xml["GTSResponse"]["Record"][i]["Field"][1].element?.text)!, forKey: "deviceID")

            }
            if (xml["GTSResponse"]["Record"][i]["Field"][3].element?.attributes["name"] == "description")
            {
                self.elements.setObject((xml["GTSResponse"]["Record"][i]["Field"][3].element?.text)!, forKey: "description")

            }
            self.posts.addObject(self.elements)

// here i print the result
            println(self.elements)

        } 
    }
}
 //Tableview Methods

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    var cell : UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell
    if(cell == nil) {
        cell = NSBundle.mainBundle().loadNibNamed("Cell", owner: self, options: nil)[0] as UITableViewCell;
    }

    cell.textLabel?.text = posts.objectAtIndex(indexPath.row).valueForKey("deviceID") as NSString
    cell.detailTextLabel?.text = posts.objectAtIndex(indexPath.row).valueForKey("description") as NSString

    return cell as UITableViewCell
}
}
导入UIKit
类mtTableViewController:UITableViewController,NSXMLParserDelegate{
var info=NSDictionary();
var parser=NSXMLParser()
var posts=NSMutableArray()
var elements=NSMutableDictionary()
var元素=NSString()
重写func viewDidLoad()
{
super.viewDidLoad()
self.beginParsing()
}
重写函数didReceiveMemoryWarning()
{
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
func beginParsing()
{
让url=NSURL(字符串:http://localhost:8080")
var-auth=
"" +
"" +
"" +
“+”轻松制动“+”+
"" +           
"" +
"";
//   "" +
let request=NSMutableURLRequest(URL:URL!)
request.HTTPMethod=“POST”
request.setValue(“application/x-www-form-urlencoded”,forHTTPHeaderField:“内容类型”)
让数据:NSData=(auth).dataUsingEncoding(NSUTF8StringEncoding)!;
request.HTTPBody=数据;
NSURLConnection.sendAsynchronousRequest(请求,队列:NSOperationQueue.mainQueue()){(响应,数据,错误)在
///println(NSString(数据:数据,编码:NSUTF8StringEncoding))
让xml=SWXMLHash.parse(数据)
let count=xml[“GTSResponse”][“Record”].all.count
对于var i=0;iInt
{
返回岗位数
}
重写func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格
{
变量单元格:UITableViewCell!=tableView.dequeueReusableCellWithIdentifier(“单元格”)作为UITableViewCell
如果(单元格==nil){
cell=NSBundle.mainBundle().loadNibNamed(“cell”,所有者:self,选项:nil)[0]作为UITableViewCell;
}
cell.textlab?.text=posts.objectAtIndex(indexath.row).valueForKey(“deviceID”)作为NSString
cell.detailTextLabel?.text=posts.objectAtIndex(indexath.row).valueForKey(“description”)作为NSString
返回单元格作为UITableViewCell
}
}

请帮忙

有两个问题。首先,
NSURLConnection.sendAsynchronousRequest()
–顾名思义–异步工作:它启动网络 请求,然后返回。完成处理程序将在稍后调用 数据已经到达。然后,您必须使用

tableView.reloadData()
使用新数据填充数据源数组后

第二,在

for var i = 0; i < count; i++
{
    self.elements.setObject(..., forKey: ...)
    self.elements.setObject(..., forKey: ...)
    // ...
    self.posts.addObject(self.elements)
}
这应该是循环中的局部变量:

for var i = 0; i < count; i++
{
    var elements = NSMutableDictionary()
    self.elements.setObject(..., forKey: ...)
    self.elements.setObject(..., forKey: ...)
    // ...
    self.posts.addObject(elements)
}
var i=0的
;i

你也可以考虑使用SWIFT数组和字典来代替。 这些值类型使得此类错误大大减少


很可能。

调用
tableView.reloadData()
填充
posts
数组后…感谢的bro,它可以工作,但它会在tableView中填充最后一个值四次,例如,tableView在四次期间仅填充此值:“Toyota 4 Runner”/“359710042110768”;thank's bro,它可以工作,但它会在tableview中填充上一个值四次,例如,tableview在四次期间仅填充此值:“Toyota 4 Runner”/“359710042110768”;完美的谢谢你!现在它显示了所有的值,但是每个值都是重复的,我如何解决它呢?这非常有用。非常感谢
for var i = 0; i < count; i++
{
    var elements = NSMutableDictionary()
    self.elements.setObject(..., forKey: ...)
    self.elements.setObject(..., forKey: ...)
    // ...
    self.posts.addObject(elements)
}