ios — Swift / PHP Как отобразить данные MySQL (JSON) в UITableView, используя Alamofire

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

Когда я запускаю приложение, мой UITableView все еще не показывает никакого результата (пусто).

Пожалуйста, кто-нибудь может просмотреть мой код, чтобы он работал? Я не могу понять, где я не прав, поскольку я не получаю никакой ошибки в XCode

TableView Controller

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

2

Решение

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


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


Два возможных вопроса:

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

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

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

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

2

Другие решения

Других решений пока нет …