这几天开始学习UIViewController
, UITableViewDataSource
, UITableViewDelegate
,发现一个xcode比较坑爹的bug,运行错误居然不会报错。调试了很久,才发现这个问题,初始化变量的时候,尽量不要使用nil
最开始声明一个变量,var books:JSON = nil
调用numberOfRowsInSection
后,返回self.books.count
本来应该报错,但是xcode没有报错,模拟器也直接白屏,最后想了很久才找到这个问题,初始化的时候应该使用var books:JSON = []
,否则nil没法进行count,但是这个在xcode并不会报错。坑爹。
import UIKit
import Alamofire
import SwiftyJSON
import MBProgressHUD
import ESPullToRefresh
class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
let identifierBookCell = "NormalCell"
let url = "https://api.douban.com/v2/movie/search"
let tag = "爱情"
var books:JSON = []
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
self.tableView.delegate = self
self.tableView.es_addPullToRefresh {
[weak self] in
Alamofire.request((self?.url)!, method: .get, parameters: ["tag":(self?.tag)!,"start":0,"count":10],encoding: URLEncoding.default).responseJSON {
response in
switch response.result {
case .success:
self?.books = JSON(response.result.value)["subjects"]
print (JSON(response.result.value))
self?.tableView.reloadData()
self?.tableView.es_stopPullToRefresh(completion: true)
case .failure(let error):
print(error)
}
}
}
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print (self.books.count)
return self.books.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let bookCell = tableView.dequeueReusableCell(withIdentifier: identifierBookCell, for: indexPath) as! BookCell;
bookCell.configureWithBook(book: books[indexPath.row])
return bookCell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}