所以我有一个数组,我将存储从http请求中获取的所有数据并将它们显示在tableView上,但似乎tableView(numberOfRowsInSection)无法识别数组中的更改,因为计数仍为0。
class OrdersViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var arr = [[String: AnyObject]]()
var selectedIndex = -1
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let baseUrl = "my url"
let consumer_key = "consumer_key"
let consumer_secret = "consumer_key"
let url = "\(baseUrl)?consumer_key=\(consumer_key)&consumer_secret=\(consumer_secret)&status=processing"
let headers2 = ["Accept": "application/json"]
Alamofire.request(url, headers: headers2)
.responseJSON { response in
self.arr.append(data from request)
}
}
let url2 = "\(baseUrl)?consumer_key=\(consumer_key)&consumer_secret=\(consumer_secret)&status=pending"
Alamofire.request(url2, headers: headers2)
.responseJSON { response in
self.arr.append(data from request)
print("arr", self.arr)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
print("after request", self.arr)
return self.arr.count
}
}
and some other codes...
我确实从http请求中获取了数据,并且在我的Alamofire呼叫中进行了更新,但是在请求后#34;继续打印空阵列,我不知道这里发生了什么。
如果有人可以提出任何会改变我思考过程的建议,那将不胜感激。
先谢谢。
答案 0 :(得分:1)
在更改tableView.reloadData()
媒体资源后,您需要致电self.arr
。相应的documentation提供了更多详细信息:
调用此方法重新加载所有用于构造表的数据,包括单元格,节页眉和页脚,索引数组等。为了提高效率,表视图仅重新显示那些可见的行。
如果您打算在许多地方更改self.arr
媒体资源,也可以向其添加属性观察者:
var arr = [[String: AnyObject]]() {
didSet { tableView?.reloadData() }
}
...所以你不需要复制和粘贴相同的代码; - )
答案 1 :(得分:0)
我建议您在一个函数中移动请求和响应逻辑,然后从viewDidAppear
而不是viewDidLoad
调用该函数,并在调用后使用reloadData()
<重新加载您的tableview / p>
答案 2 :(得分:0)
在Viewdidload中使用此代码
allWorkouts
而不是
let ndx = Int(arc4random_uniform(UInt32(allWorkouts.count)))
let workout = allWorkouts[ndx]