追加不起作用

时间:2015-11-24 07:16:33

标签: json swift uitableview append

我已经解析了一个json字符串,我想在tableview中使用它。当我尝试将json字符串附加到数组中时,append方法无法正常工作。这是我用过的代码。任何人都可以帮我这个吗?

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

var userName = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate =  self
    tableView.dataSource = self

    // 1
    let urlAsString = "http://demo.codeofaninja.com/tutorials/json-example-with-php/index.php"
    let url = NSURL(string: urlAsString)!
    let urlSession = NSURLSession.sharedSession()

    //2
    let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
        if (error != nil) {
            print(error!.localizedDescription)
        }


        // 3
        do {
        let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
        /*let err: NSError!
        if (err != nil) {
            print("JSON Error \(err.localizedDescription)")
        }*/

        // 4
        //let fname: String! = jsonResult["firstname"] as! String
        //let lname: String! = jsonResult["lastname"] as! String
        //let usrname: String! = jsonResult["username"] as! String

        dispatch_async(dispatch_get_main_queue(), {

            if let users = jsonResult.objectForKey("Users") as? [[String:AnyObject]]
            {
                for user in users
                {
                    print("First Name:")
                    print(user["firstname"]!)
                    print("Last Name:")
                    print(user["lastname"]!)
                    print("User Name:")
                    let nameUser = user["username"]! as! String
                    print(nameUser)
                    self.userName.append(nameUser)
                    print("***************")
                }
            }

            //print(jsonResult["Users"]!)
            //print(lname)
            //print(usrname)
        })

        }
        catch {
            print("error");
        }
    })

        jsonQuery.resume()
    //self.userName.append("ganesh")
    // 5
    print(userName)

}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell!
    cell.textLabel?.text = userName[indexPath.row]
    return cell
}

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    userName.removeAtIndex(indexPath.row)
    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}


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

2 个答案:

答案 0 :(得分:2)

您正在数组中追加,只需在调度结束时调用self.tableView.reloadData()刷新表视图,以便在tableView中显示数据。

答案 1 :(得分:1)

append函数工作正常,但是你在后台填充数组,并且在数组中有数据时从不重新加载tableView

for user in users
{
    if let nameUser = user["username"] as? String {
        self.userName.append(nameUser)
    }    
}
self.tableView.reloadData()

if let users = jsonResult.objectForKey("Users") as? [[String:AnyObject]]

中尝试此操作