Xcode 在swift中填充tableview
我在解析XML结果后得到了这个结果 当我做一个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
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)
}