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

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

当我运行APP时,我的UITableView仍然没有显示任何结果(空白)。

请任何人都可以查看我的代码以使其有效吗? 我无法看到我错在哪里,因为我在Xcode中没有任何错误

TableView控制器

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> { 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 } } 

表视图单元格

 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被定义为getData 内的方法。 如果将它们从getData方法中拉出来,则应成功调用它们。 请注意,当您将它们拉出时,编译器现在应该抱怨您需要添加override (就像您对cellForRowAtIndexPath )。


我基于标准表格视图问题的原始响应如下。


两个可能的问题是:

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

    如果是这种情况,则根本不会调用您的UITableViewDataDelegate方法。 在这些例程中放置断点/日志语句并确认它们已被调用。 如果没有,请确认已正确设置表视图的委托和数据源属性。

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

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