Я хотел бы создать 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?}
Проблема в том, что numberOfSectionsInTableView
а также numberOfRowsInSection
определяются как методы внутри getData
, Если вы вытащите их из getData
метод, они должны быть успешно вызваны. Обратите внимание, что когда вы их извлекаете, компилятор должен жаловаться, что вам нужно добавить override
(как у вас есть для cellForRowAtIndexPath
).
Мой оригинальный ответ, основанный на стандартных проблемах табличного представления ниже.
Два возможных вопроса:
Не удалось указать делегата табличного представления:
Если бы это было так, ваш UITableViewDataDelegate
методы не будут вызываться вообще. Поместите точки останова / операторы журнала в эти подпрограммы и подтвердите, что их вызывают Если нет, убедитесь, что свойства делегата и источника данных табличного представления установлены правильно.
Неспособность подключить @IBOutlet
ссылки в UITableViewCell
подкласс для прототипа ячейки.
Если это так, то пользовательские свойства ячейки, например, cell.profileID
и т. д., будет nil
в cellForRowAtIndexPath
, Если они nil
, затем вернитесь в Интерфейсный Разработчик и подключите их.
Других решений пока нет …