Swift / PHP Как отображать данные mysql (json) в UITableView с использованием Alamofire

Я хотел бы создать TableView, который возвращает только одну ячейку. Включите в эту ячейку три ярлыка: id, имя пользователя и категорию. Это приведет к тому, что пользователь сможет увидеть свою основную подробную информацию.

Когда я запускаю 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<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 } } 

Настольная камера

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

Проблема в том, что numberOfSectionsInTableView и numberOfRowsInSection определяются как методы внутри getData . Если вы вытащите их из метода getData , их следует вызвать успешно. Обратите внимание, что когда вы вытаскиваете их, компилятор должен теперь жаловаться, что вам нужно добавить override (например, для cellForRowAtIndexPath ).


Мой первоначальный ответ, основанный на стандартных проблемах с табличным представлением, приведен ниже.


Возможны две проблемы:

  1. Невозможность указать делегата табличного представления:

    Если это было так, ваши методы UITableViewDataDelegate вообще не будут вызваны. Положите операторы breakpoints / log в эти подпрограммы и подтвердите, что они вызываются. Если нет, убедитесь, что свойства делегата таблицы и источника данных правильно установлены.

  2. Невозможность подключить ссылки @IBOutlet в подклассе UITableViewCell к ячейке прототипа.

    Если это так, пользовательские свойства ячеек, например cell.profileID и т. Д., Будут отсутствовать в cellForRowAtIndexPath . Если они nil , вернитесь к интерфейсу Builder и подключите их.