2015-03-02 53 views
-1

包裝JSON結果在一本字典,我試圖檢索JSON,並在迅速字典包裹它,不能找出問題所在。問題迅速

我的SWIFT代碼是:

let apiRequest = NSURLRequest(URL: "my api url") 

NSURLConnection.sendAsynchronousRequest(apiRequest, queue: processingQueue) {response, data, error in 
if error != nil { 
    completion(results: nil,error: error) 
    return 
} 

var JSONError : NSError? 
let resultsDictionary = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions(0), error: &JSONError) as? NSDictionary 
if JSONError != nil { 
    completion(results: nil, error: JSONError) 
    return 
} 
    // This next line causes an error that 'unexpectedly found nil while unwrapping an Optional value'  
    let photosContainer = resultsDictionary!["ArrayOfPhotoDTO"] as NSDictionary 
    let photosReceived = photosContainer["PhotoDTO"] as [NSDictionary] 

如果我設置一個斷點,然後我resultsdictionary是零,但是我的數據變量似乎無誤。 _bytes視圖顯示

"[{\"$id\":\"1\",\"PhotoID\":57,\"JobID\":2346,\"DateAdded\":\"28/11/2014 12:00:00 AM\",\"Location\":\"Beverly Hills (1).JPG\",\"Filename\":\"Beverly Hills (1).JPG\",\"Caption\":\"Beverly Hills (1).JPG\"}," 

JSONError爲零。

如果我打電話給我的API直接我得到以下結果:

[ 
    { 
    "$id": "1", 
    "PhotoID": 57, 
    "JobID": 2346, 
    "DateAdded": "28/11/2014 12:00:00 AM", 
    "Location": "Beverly Hills (1).JPG", 
    "Filename": "Beverly Hills (1).JPG", 
    "Caption": "Beverly Hills (1).JPG" 
}, 

我在做什麼錯?

+0

當你在瀏覽器中直接調用你的API時,你會得到XML?! – MrBr 2015-03-02 12:49:02

+0

對不起,API返回JSON,但我使用瀏覽器擴展名來格式化爲xml! – Evonet 2015-03-02 12:50:07

+1

我真的建議你使用類似SwiftyJSON的解析結果。標準的方式是冗長的,這使得很難追蹤錯誤。 (https://github.com/SwiftyJSON/SwiftyJSON) – Raymond 2015-03-02 12:55:01

回答

1

你的JSON開始與[這意味着它是一個數組,而不是字典。 替換您符合:

let resultsArray = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions(0), error: &JSONError) as? NSArray 

當你訪問數據確保你把冷杉元素的數組:

let photosContainer = resultsArray![0]["ArrayOfPhotoDTO"] as NSDictionary 

你應該確保該數組包含任何對象解開之前與!

+0

謝謝,我得到的錯誤在第二行「的NSArray沒有成員名'下標'「 – Evonet 2015-03-02 13:08:54

+0

其實我修正了那個錯誤,'!'是在陣列的錯誤的一面。 – Evonet 2015-03-02 13:14:18

+0

我已經更新的問題,以顯示JSON輸出,即使你的建議,我仍然得到我的問題 – Evonet 2015-03-02 13:23:18