Swift/PHP 如何使用 Alamofire 在 UITableView 中显示 mysql 数据 (json)

Swift/PHP How to display mysql data (json) in UITableView using Alamofire

我想创建一个 TableView,其中 return 只有一个单元格。在这个单元格中包含三个标签:id、username 和 category。这将导致让用户看到他的基本详细信息。

当我运行应用程序时,我的UITable视图仍然没有显示任何结果(空白)。

任何人都可以查看我的代码以使其正常工作吗?我看不出哪里错了,因为我在 Xcode

中没有收到任何错误

Table视图控制器

import UIKit
import Alamofire

class MyProfile: UITableViewController {

var users = [MyProfileBasicData]()

    override func viewDidLoad() {
    super.viewDidLoad()

    }
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(true)
        getData()
    }

    func getData() {
        let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
        var username = prefs.valueForKey("USERNAME") as NSString

        Alamofire.request(.GET, "http://mysite/app/data/jsonuser.php", parameters: ["username": username]).responseJSON() { (_, _, data, error) in if let jsonResult = data as? Array<Dictionary<String, String>> {
            var UserID = jsonResult [0]["Id"]
            var username1 = jsonResult [0]["username"]
            var category = jsonResult [0]["category"]

            for result in jsonResult {
                var userInfo = MyProfileBasicData()
                userInfo.Id = jsonResult [0]["Id"]
                userInfo.username = jsonResult [0]["username"]
                userInfo.category = jsonResult [0]["category"]
                self.users.append(userInfo)

            }

                dispatch_async(dispatch_get_main_queue(),

                    { self.tableView.reloadData()
                    })
                println(UserID)
                println(username1)
                println(category)
            }
            println(error)
        }
    func didReceiveMemoryWarning() {

    }

   func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return users.count
    }
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath:
        indexPath) as MyProfileCell

    var user = users[indexPath.row]
    cell.profileID?.text = user.Id
    cell.profileUsername?.text = user.username
    cell.profileCategory?.text = user.category

return cell
    }
  }

Table 查看单元格

import UIKit

class MyProfileCell: UITableViewCell {

    @IBOutlet weak var profileCategory: UILabel!
    @IBOutlet weak var profileID: UILabel!
    @IBOutlet weak var profileUsername: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()

    }
    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }

}

数据

import Foundation

class MyProfileBasicData: NSObject {

    var Id:String?
        var username:String?
        var category:String?


    }

问题是 numberOfSectionsInTableViewnumberOfRowsInSection 被定义为方法 inside getData。如果将它们从 getData 方法中拉出,它们应该会被成功调用。请注意,当您将它们拉出时,编译器现在应该抱怨您需要添加 override(就像您对 cellForRowAtIndexPath 所做的那样)。


我基于标准 table 视图问题的原始回复如下。


两个可能的问题是:

  1. 无法指定 table 视图的委托:

    如果是这种情况,您的 UITableViewDataDelegate 方法将根本不会被调用。在这些例程中放入 breakpoints/log 语句并确认它们被调用。如果不是,请确认 table 视图的委托和数据源属性已正确设置。

  2. 无法将 UITableViewCell 子类中的 @IBOutlet 引用连接到原型单元格。

    如果是这种情况,自定义单元格属性,例如cell.profileID等,在cellForRowAtIndexPath中会是nil。如果它们是 nil,则返回到 Interface Builder 并将它们连接起来。