Я хотел бы создать 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
).
Мой первоначальный ответ, основанный на стандартных проблемах с табличным представлением, приведен ниже.
Возможны две проблемы:
Невозможность указать делегата табличного представления:
Если это было так, ваши методы UITableViewDataDelegate
вообще не будут вызваны. Положите операторы breakpoints / log в эти подпрограммы и подтвердите, что они вызываются. Если нет, убедитесь, что свойства делегата таблицы и источника данных правильно установлены.
Невозможность подключить ссылки @IBOutlet
в подклассе UITableViewCell
к ячейке прототипа.
Если это так, пользовательские свойства ячеек, например cell.profileID
и т. Д., Будут отсутствовать в cellForRowAtIndexPath
. Если они nil
, вернитесь к интерфейсу Builder и подключите их.