1

我正在编写我的第一个 iOS 应用程序。它包括通过 OAuth2Client 的 API 调用。

问题是在调用 AdvAPI getUser 函数时。通过 NXOAuth2Request 发出 GET 请求,该请求处理 responseHandler 中的响应数据,并将变量结果设置为 NSDictionary。但是,在 XOAuth2Request 函数之外无法访问结果。如何获取结果并从 getUser 返回?

谢谢!

import Foundation

class AdvAPI {
var store : NXOAuth2AccountStore
var account : NXOAuth2Account?

init(){
    self.store = NXOAuth2AccountStore.sharedStore() as NXOAuth2AccountStore
    self.store.setClientID(
        "test",
        secret: "test",
        authorizationURL: NSURL.URLWithString("http://localhost:3000/oauth/authorize"),
        tokenURL: NSURL.URLWithString("http://localhost:3000/oauth/token"),
        redirectURL: NSURL.URLWithString("http://localhost:3000/oauth/connect"),
        forAccountType: "AdventureApp"
    )

    self.account = self.store.accountsWithAccountType("AdventureApp")[0]
}


func getUser(parameters : NSDictionary=[String: AnyObject]()) -> NSDictionary {

    NXOAuth2Request.performMethod("GET",
        onResource: NSURL.URLWithString("http://localhost:3000/api/v1/me"),
        usingParameters: parameters,
        withAccount: self.account,
        sendProgressHandler: nil,
        responseHandler: {(response: NSURLResponse?, responseData: NSData?, error: NSError?) in
            var jsonError: NSError
            var result = NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
        }
    )
    return result
}

}
4

1 回答 1

1

getUser 函数在 NXOAuth2Request 完成之前返回,因此从不设置结果变量。

为了解决这个问题,唯一的选择似乎是在请求完成时从 responseHandler 中调用回调。

 func getUser(parameters : NSDictionary=[String: AnyObject]()) {
    NXOAuth2Request.performMethod("GET",
        onResource: NSURL.URLWithString("http://localhost:3000/api/v1/me"),
        usingParameters: parameters,
        withAccount: self.account,
        sendProgressHandler: nil,
        responseHandler: {(response: NSURLResponse?, responseData: NSData?, error: NSError?) in
            var jsonError: NSError
            var result = NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
            self.delegate.didReceiveAPIResult(result)
        }
    )
 }
于 2014-08-20T09:49:47.517 回答