Array不与tableView(numberOfRowsInSection)方法连接

时间:2017-03-30 00:04:00

标签: swift http alamofire

所以我有一个数组,我将存储从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;继续打印空阵列,我不知道这里发生了什么。

如果有人可以提出任何会改变我思考过程的建议,那将不胜感激。

先谢谢。

3 个答案:

答案 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]