Swift 3 / Alamofire:我无法获取 UITableView 上的数据

Posted

技术标签:

【中文标题】Swift 3 / Alamofire:我无法获取 UITableView 上的数据【英文标题】:Swift 3 / Alamofire : I am not able to fetch the data on UITableView 【发布时间】:2017-06-29 00:27:22 【问题描述】:

我正在使用 Alamofire 并尝试在我的 tableview 上获取数据,但是我无法获取数据。当我使用 cmd Print 时,它向我显示数据但无法获取数据。如何获取我的 tableview 上的数据?

请在下面找到代码:-

import UIKit
import Alamofire
import SwiftyJSON


class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSURLConnectionDelegate 
//let myarray = ["item1", "item2", "item3"]
var tableData = Array<Group>()

var arrRes = [[String:AnyObject]]() //Array of dictionary



var group = [Group]()

@IBOutlet weak var tableview: UITableView!

override func viewDidLoad() 
    super.viewDidLoad()
    loadGroups()


func loadGroups()

    let testhappyhour:Group = Group(tempName: "TEST", tempID: "TESST", icons: "TEST", tempgbcount: "TEST")
    self.group.append(testhappyhour)

    //let groupQuery:String = "http://jsonplaceholder.typicode.com/users"
    Alamofire.request("http://jsonplaceholder.typicode.com/users").responseJSON
         response in switch response.result 
        case .success(let JSON):
            let response = JSON as! NSArray
            for item in response  // loop through data items
                let obj = item as! NSDictionary
                let happyhour = Group(tempName:obj["NAME"] as! String, tempID:obj["id"] as! String, icons:obj["icon"] as! String, tempgbcount:obj["TOTAL"] as! String)
                self.group.append(happyhour)
            
            self.tableview.reloadData()

        case .failure(let error):
            print("Request failed with error: \(error)")
            
    



func convertToArray(text: String) -> [Any]? 
    if let data = text.data(using: .utf8) 
        do 
            return try JSONSerialization.jsonObject(with: data, options: []) as? [Any]
         catch 
            print(error.localizedDescription)
        
    
    return nil


override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)
    tableview.reloadData()



override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()






func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    //return myarray.count
    return arrRes.count


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    //let cell = tableView.dequeueReusableCell(withIdentifier: "groupCell", for: indexPath) as! UITableViewCell
   // cell.textLabel?.text = myarray[indexPath.item]
    let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "groupCell")!
    var dict = arrRes[indexPath.row]
    cell.textLabel?.text = dict["NAME"] as? String
    cell.detailTextLabel?.text = dict["TOTAL"] as? String
    return cell



谢谢!!

【问题讨论】:

【参考方案1】:

需要像这样改变loadGroups函数

func loadGroups()

    let testhappyhour:Group = Group(tempName: "TEST", tempID: "TESST", icons: "TEST", tempgbcount: "TEST")
    self.group.append(testhappyhour)

    Alamofire.request("http://jsonplaceholder.typicode.com/users").responseJSON
         response in switch response.result 
        case .success(let JSON):
            let response = JSON as! NSArray
            for item in response  // loop through data items
                let obj = item as! NSDictionary
                let happyhour = Group(tempName:obj["NAME"] as! String, tempID:obj["id"] as! String, icons:obj["icon"] as! String, tempgbcount:obj["TOTAL"] as! String)
                self.group.append(happyhour)
                self.arrRes.append(obj) // ADD THIS LINE
            
            self.tableview.reloadData()

        case .failure(let error):
            print("Request failed with error: \(error)")
            
    

【讨论】:

嗨,它确实有效,但是我无法获得 UILabel。我希望它显示在 UILabel 上。是的,非常感谢:) 你说的是这些标签吗? cell.textLabel?.text = dict["NAME"] as?字符串 cell.detailTextLabel?.text = dict["TOTAL"] as?字符串 我有一个名为 GroupCellTableViewCell 的类文件,我已经在其中连接了我的 UILabel。 嗯好的,然后你可以打开一个新问题。解释问题然后我将能够提供帮助。现在我不完全知道问题可能出在哪里。 好吧,我们可以在聊天中进行这个对话【参考方案2】:

Array 'group' 附加了 Alamofire 响应,但 Array 'arrRes' 用作表视图数据源。如果您在数据源方法中使用 self.group 而不是 arrRes,则该表应使用 Alamofire 响应中收到的新组进行更新。

【讨论】:

以上是关于Swift 3 / Alamofire:我无法获取 UITableView 上的数据的主要内容,如果未能解决你的问题,请参考以下文章

获取新 Alamofire Swift 3 的请求

Swift - 无法获取 Alamofire.request

在 Swift 中使用 Alamofire 5.0 获取 3 级深度 JSON 值

无法使用 Alamofire Swift 获取 Json 数据

无法解析响应 alamofire swift 3

Alamofire超时无法在Swift 3中运行