我正在研究一個簡單的項目來幫助學習Swift,並且我遇到了一個我認爲具有更深層次影響/學習機會(嘗試着眼於光明方面)的問題。使用AlamoFire進行HTTP請求導致EXC_BAD_ACCESS
高級別問題是,當我POST使用AlamoFire JSON編碼參數,一個EXC_BAD_ACCESS誤差迅速出現在代碼單獨的行,其中我設置的參數(具體而言CoreLocation管理器的「didUpdateLocations」)中的一個.. 。這裏是代碼:
在ViewController中,我創建了一個可變字典:
var parameters = [String:AnyObject]()
而且,對於didUpdateLocations
事件,我給你更新的緯度/經度值在可變字典中的各個按鍵。
class ViewController: UIViewController, CLLocationManagerDelegate {
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
...
func locationManager(locManager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
appDelegate.parameters["longitude"] = locManager.location.coordinate.longitude
appDelegate.parameters["latitude"] = locManager.location.coordinate.latitude
}
最後,我有一個周期函數(使用NSTimer.scheduledTimerWithTimeInterval
)是POST到服務器。
func updatePost() {
println("POSTing update")
Alamofire.request(.POST, "http://server.co/endpoint",
parameters: appDelegate.parameters, encoding: .JSON)
}
如果我註釋掉Alamofire POST,一切都很好。 隨着的文章中,我得到的didUpdateLocations的第一行(其中longitude
鍵設置)
我懷疑它的東西做的參數是如何通過Alamofire的編碼程序轉換的EXC_BAD_ACCESS錯誤,但我不知道爲什麼它會出現在didUpdateLocations函數中,而不是在Alamofire調用本身...
任何人都可以提供任何見解嗎?謝謝
你爲什麼要把所有東西放在AppDelegate中?全局共享可變狀態是EXC_BAD_ACCESS和其他所有權錯誤的處方。 – mattt 2014-12-06 01:52:42
這是一個持久的形式,我早些時候嘗試,但很好的一點。我只是將'parameters'移到ViewController中,同樣的問題正在發生。 – Dan 2014-12-06 02:11:43