2014-10-03 59 views
0

我想跟着一個教程 - 哪個失敗,並已發現一些代碼堆棧上的流程Make REST API call in Swift決定嘗試這種方法。下面的代碼是一個複製粘貼(我知道!)與URL的變化,但我似乎得到一個錯誤打印到控制檯而不是JSON - 錯誤很大程度上無益 - 0x0000000000000000如何從swift調用休息Web服務

JSON似乎打印到瀏覽器窗口,所以我不完全確定這種方法可能會出現什麼問題?請有人提供一些幫助,爲什麼這可能不工作?

感謝

var url : String = "http://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=d6e995dee02d313a28ed4b799a09b869" 
    var request : NSMutableURLRequest = NSMutableURLRequest() 
    request.URL = NSURL(string: url) 
    request.HTTPMethod = "GET" 

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in 
     var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil 
     let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary 

     if (jsonResult != nil) { 
      println(jsonResult); 
     } else { 
      // couldn't load JSON, look at error 
      println(error); 
     } 
    }) 
+1

你不是pa正確地查找「錯誤」對象。將它定義爲'var error:NSError?'並將它傳遞給'...,error:&error)'; Swift會爲你轉換一個指針。參見[採用Cocoa設計模式](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-XID_7)。 – 2014-10-03 14:40:27

回答

2

的問題是,在JSONP調用返回的數據不JSON

如果有正確的JSON測試您的代碼將工作正常像http://ip.jsontest.com

,使其與工作Flickr你必須修改它如下:

var json_str:NSString = NSString(data: data, encoding: NSUTF8StringEncoding) 


json_str = json_str.substringFromIndex(14) 
json_str = json_str.substringToIndex(json_str.length-1) 

let new_data:NSData = json_str.dataUsingEncoding(NSUTF8StringEncoding)! 


var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil 
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(new_data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary 

if (jsonResult != nil) { 
    println(jsonResult); 
} else { 
    // couldn't load JSON, look at error 
    println(error); 
} 
+0

您也可以通過向URL添加參數nojsoncallback = 1來告訴Flickr API發送直接JSON而不是JSONP。 – 2014-10-03 14:27:40

+0

@abinop你可以讓這個例子更清楚一點,並將其與他的代碼整合?這會非常有幫助。謝謝。 – 2014-11-04 04:35:46