我正在使用将使用MongoLab作为mongodb主机的应用。我找到了这个教程:Devdactic,我很容易让它在我自己的计算机上本地工作。问题是,我想使用自己的MongoLab API,而不是该教程中提供的api。我的API路径如下所示:
https://api.mongolab.com/api/1/databases/DBName/collections/CollName?apiKey=MyAPIKey
返回此JSON:
[ { "_id" : {
"$oid" : "55f853a2e4b0d8eab7e4a058"
} ,
"coordinate" : {
"latitude" : "123" ,
"longitude" : "456"
}
} ]
是的,我知道,它不是一个非常先进的JSON,只是看看它是否有效。
我的代码是用Swift编写的,从教程中我创建了一个如下所示的RestAPIManager类:
typealias ServiceResponse = (JSON, NSError?) -> Void
class RestApiManager: NSObject {
static let sharedInstance = RestApiManager()
let baseURL = "https://api.mongolab.com/api/1/databases/DBName/collections/CollName?apiKey=MyAPIKey"
func getCoordinate(onCompletion: (JSON) -> Void) {
let route = baseURL
makeHTTPGetRequest(route, onCompletion: { json, err in
onCompletion(json as JSON)
})
}
func makeHTTPGetRequest(path: String, onCompletion: ServiceResponse) {
let request = NSMutableURLRequest(URL: NSURL(string: path)!)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
let json:JSON = JSON(data: data)
onCompletion(json, error)
})
task.resume()
}
}
然后我尝试"得到"这个API在ViewController中的响应,点击按钮点击:
@IBAction func addBuoyButtonClick(sender: AnyObject) {
getDataFromAPI()
}
func getDataFromAPI(){
RestApiManager.sharedInstance.getCoordinate { json in
let results = json["coordinate"]
for (index: String, subJson: JSON) in results {
let latitude: AnyObject = subJson["latitude"].object
let alert = UIAlertView()
alert.title = "Latitude: "
alert.message = "Lat: " + latitude.string as String
alert.addButtonWithTitle("Ok")
alert.show()
}
}
}
为了查看它是否有效,我尝试在警报视图中提醒响应。结果什么都没有!警报视图甚至无法显示。
很抱歉很长的帖子,但我认为用一些实际的代码而不是疯狂的猜测会更好! :P