【发布时间】:2015-11-19 11:43:52
【问题描述】:
我正在从 web 服务(汽车数据)加载一些 XML,创建一些汽车对象并希望在 TableViewController 中显示它们。
当用户选择了开始和目标位置后,我对 web 服务进行异步调用,显示活动指示器,一旦加载数据,我就会转到新视图。所以我有这样的事情:
class NewReservationViewController : UIViewController {
@IBAction func searchCarsClicked(sender: UIBarButtonItem) {
//show load cars activity indicator
loadingCarsActivityIndicator.startAnimating()
//load available cars from webservice asyncronously
DataManager.getAvailableCars([...parameter list...], carsLoadedCallback: carsLoaded)
}
func carsLoaded(loadedCars: [Car]) {
//dismiss the waiting widget
//trigger the segue and advance to the next screen
loadingCarsActivityIndicator.stopAnimating()
print("stopped cars loading activity indicator")
print("cars loaded callback called")
print("loaded \(loadedCars.count) distinct cars")
self.cars = loadedCars
performSegueWithIdentifier("showAvailableCars", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showAvailableCars" {
let carTableViewController = segue.destinationViewController as! CarTableViewController
carTableViewController.cars = self.cars
presentViewController(carTableViewController, animated: false, completion: nil)
}
}
}
class DataManager {
class func getAvailableCars([...parameter list...], carsLoadedCallback: ([Car]) -> Void){
Webservice.getAvailability([...parameter list...], completionHandler: { (data, response, error) in
//parse xml
//in the end I get an Array of Car objects
var cars: [Car] = ...
carsLoadedCallback(cars)
})}
}
}
当我使用在 CarTableViewController 类中创建的一些 DummyData 填充 TableView 时,它工作正常。但是,当我尝试将汽车数组传递给我的 TableViewController 时,我得到一个 EXC_BAD_ACCESS 代码 = 2 异常。据我所知,这是某种内存异常,通常是由损坏的指针引起的。所以我猜我在我调用的静态方法中的静态 DataManager 类中创建的汽车数组被破坏了。但是我不确定这一点,因为自动引用计数应该避免这种情况。
表视图甚至会显示数据,但随后会立即因 EXC_BAD_ACCESS 异常而崩溃。我尝试在 XCode 的断点选项卡中设置一个通用断点,但是我没有收到关于应用程序崩溃原因的合理错误消息。
您对为什么会发生这种情况有任何想法吗?如何获得更好的错误信息? 提前感谢您的帮助。
【问题讨论】:
标签: ios objective-c swift swift2 exc-bad-access