当我尝试制作reloadData()时,我遇到了崩溃

时间:2016-09-12 12:36:14

标签: ios swift uitableview

当我尝试重新加载tableview时,我收到类似

的错误
  

libc ++ abi.dylib:以NSException类型的未捕获异常终止

我的UITableViewController

class NewTableViewController: UITableViewController {

var videos = [Video]()
    {
    didSet {

            self.tableView.reloadData() //error here
    }
}
let URL = "https://api.vid.me/channel/1/new"

override func viewDidLoad() {
    super.viewDidLoad()

    let request = Alamofire.request(.GET, self.URL)
        request.responseObject { (response: Response<NewestVideos, NSError>) in

        switch response.result {
        case .Success(let newest):
            self.videos = newest.videos!
        case .Failure(let error):
            print("Request failed with error: \(error)")
        }
    }
}

override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {return self.videos.count}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! NewTableViewCell
    let video = videos[indexPath.row]
    cell.newVideoNameLabel?.text = video.completeUrl != nil ? video.completeUrl! : "nil"
     return cell
     }
}

我认为线程有问题吗? 在我的应用中,我发出了.get请求,如果我尝试在didSet中打印print(self.videos),我会得到一个值 我尝试添加

dispatch_async(dispatch_get_main_queue()) {
   self.tableView.reloadData()
}

2 个答案:

答案 0 :(得分:1)

确保在设置videos时,您在Main Queue

中调用它

当您登录videos时,您可以保护Main Queue

dispatch_async(dispatch_get_main_queue()) {
   self.videos = newest.videos!
}

或者您可以在以下情况下保护它:

didSet {
    dispatch_async(dispatch_get_main_queue()) {
        self.tableView.reloadData()
    }
}

答案 1 :(得分:1)

libc++abi.dylib: terminating with uncaught exception of type NSException错误,从任何方面发生。

  • outlet
  • 删除引用
  • performSegueWithIdentifier
  • 中的错误名称
  • IBActions类型。

检查此link以获取更多信息