Я пытаюсь заполнить таблицу в моем приложении, но я не знаю, как создать функцию, чтобы начать ее заполнять. Я хотел бы сделать это, потому что я получаю данные из HTTP-запроса, но массив, который будет содержать его, пуст, если необходимо обновить источник данных tableview. Возможно ли это? Я использую Свифт.Данные загрузки UITableView
Это мой код:
class ContractsViewController: UIViewController, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource {
var companyTxt: String = ""
var descriptionTxt: String = ""
var idTxt: String = ""
var dateCreatedTxt: String = ""
var dateExpirationTxt: String = ""
var savedData = Dictionary<Int, JSON>()
var json: JSON = []
@IBOutlet weak var searchContracts: UISearchBar!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var myIndicator: UIActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
preUpload()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func preUpload() {
let headers = [
"X-Limit": "5",
"X-Sort": "{\"expirationDate\":-1}"
]
myIndicator.color = (UIColor.redColor())
myIndicator.startAnimating()
Async.background {
Alamofire.request(.GET, "https://mydata", headers: headers)
.responseJSON { response in
switch response.result {
case .Success (let data):
self.json = JSON(data)
let replaced = FindAndReplace().findAndReplace(self.json)
for (pos, object): (String, JSON) in replaced {
print("")
print("pos -> " + pos)
self.savedData[Int(pos)!] = object
}
case .Failure(let error):
print(error)
}
}
}.main {
self.myIndicator.stopAnimating()
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.searchContracts.resignFirstResponder()
}
// MARK: TableView
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
//return name.count
print("Json count -> " + String(json.count))
return json.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell: ServiceContractsCell? = tableView.dequeueReusableCellWithIdentifier("cellServiceContracts", forIndexPath: indexPath) as? ServiceContractsCell
let value = self.savedData[(indexPath.row)]
let valueMapped = Mapper<ServiceContract>().map(String(value))
cell?.descriptionText.text = valueMapped?.description
return cell!
}
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
return false
}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
self.tableView?.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
}
func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle
{
return (UITableViewCellEditingStyle.Delete)
}
func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
return true
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
print("row = %d",indexPath.row)
}
}
Спасибо заранее.
Редактировать Я не могу использовать reloadData() и self.tableView.delegate/источник данных в viewDidLoad()
Вам нужно вызвать 'tableView.reloadData()' после того, как вы получили и проанализируете данные JSON. – Larme
Как сказал здесь Larme, вам нужно вызвать reloadData(), чтобы в представлении таблицы отображались новые значения. –
Должен ли я использовать reloadData() в .main? Поскольку у меня есть исключение nil, если я пытаюсь это сделать – Jigen