- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 NSURLSession.sharedSession().dataTaskWithRequest(request)
时遇到问题。我想根据某些 API 对我的应用程序进行身份验证,如果身份验证成功,则该应用程序将允许用户授权健康工具包并最终从那里获取一些数据。
我的 viewDidLoad()
中有这个
print ("AUTHORIZING APIGEE!!!")
authorizeApigee()
if (self.errorApigee == 0) {
print ("APIGEE AUTHORIZED!")
// We cannot access the user's HealthKit data without specific permission.
print ("AUTHORIZING HEALTHKIT!!")
getHealthKitPermission()
print ("HEALTHKIT AUTORIZED!")
} else {
print ("APIGEE UNAUTHORIZED!")
}
这是授权函数:
// Authenticating app with Apigee Health APIx
func authorizeApigee(){
// Send HTTP GET Request
let scriptUrl = "https://fhirsandbox-prod.apigee.net/oauth/v2"
let urlWithParams = scriptUrl + "/accesstoken?grant_type=client_credentials"
let myUrl = NSURL(string: urlWithParams);
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST"
// Add Basic Authorization
let username = "****"
let password = "****"
let loginString = NSString(format: "%@:%@", username, password)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions())
request.setValue(base64LoginString, forHTTPHeaderField: "Authorization")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
// Check for error
if error != nil
{
self.errorApigee = 1
print("error=\(error)")
return
}
// Print out response string
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
}
task.resume()
}
问题是,即使 authorizeApigee()
被调用,应用程序也会停止在 NSURLSession.sharedSession().dataTaskWithRequest(request)
处,退出函数,显然 errorApigee
变量没有更新,因此它进入下一步授权健康工具包而不授权 Apigee。最后,当健康套件获得授权后,它会返回并授权 Apigee。
知道为什么会发生这种情况吗?任何提示将不胜感激!
最佳答案
这是一个如何使用 completion
的简单示例:
func authorizeApigee(completion: (auth: Bool) -> Void) {
// Send HTTP GET Request
let scriptUrl = "https://fhirsandbox-prod.apigee.net/oauth/v2"
let urlWithParams = scriptUrl + "/accesstoken?grant_type=client_credentials"
let myUrl = NSURL(string: urlWithParams);
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST"
// Add Basic Authorization
let username = "****"
let password = "****"
let loginString = NSString(format: "%@:%@", username, password)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions())
request.setValue(base64LoginString, forHTTPHeaderField: "Authorization")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
// Check for error
if error != nil
{
self.errorApigee = 1
print("error=\(error)")
completion(auth: false)
}
// Print out response string
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
completion(auth: true)
}
task.resume()
}
以及如何使用:
self.authorizeApigee { (auth) -> Void in
if (auth) {
getHealthKitPermission()
} else {
//print errors
}
}
关于ios - NSURLSession.sharedSession().dataTaskWithRequest(request) 最后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38639216/
我的 iOS swift 应用程序出现奇怪的错误。编译器在第一行提示: let task = session.dataTaskWithRequest(request) { data, response
我正在使用 swift 创建一个 IOS 应用程序。最近,我遇到了一个奇怪的错误。我正在尝试检查 url 是否有效,因此,我正在使用 url 创建请求并检查响应。我使用 NSUrlSession 的
我必须创建一个应用程序来恢复 API 中的数据,为此我在请求中使用了 NSURLSession.sharedSession 和 dataTaskWithRequest。 我设法恢复了所有信息,但我不明
public func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?,
如何等待 dataTaskWithRequest 完成?网络抓取完全结束后,我需要执行一些任务。 最佳答案 如果确实需要同步请求,可以使用信号量。 我在 NSURLSession 上实现了一个小类来提
在我的应用程序中,用户点击标记,我需要调用网络服务才能获取要显示的信息。我使用 NSURLSession.dataTaskWithRequest 然后在主队列上调用dispatch_async以向用户
我正在尝试制作一个通用类,该类将从 URL 读取 JSON 数据,并使用从 JSON 数据创建的 NSDictionary 执行回调。我已经创建了一个静态类来执行该功能,但它似乎在 dataTaskW
这个问题在这里已经有了答案: How can I get the Data from NSURLSession.sharedSession().dataTaskWithRequest (2 个答案)
我有以下代码: var resultData:NSData? task = session!.dataTaskWithRequest(request) { (data: NSData!, respon
我目前正在像往常一样开发一个 WS 调用,但我不知道为什么这只在我第一次调用它时有效,数据第一次有值(value),但如果我再次调用它,它返回 nil。如果我查看响应,我可以看到它在数据为 nil 时
这是我的代码: let targetURL = NSURL(string: self.urlStringForRequestChannelDetails) let request =
我有这个函数负责 API 调用 (makeAPICall),当 httpResponse.statusCode != 200< 时,我想为某些 API 响应抛出错误。问题是,据我所知,NSURLSes
我是 iOS 编程的新手,正在尝试创建我的第一个应用程序。我正在使用 从服务器获取一些数据 var task = NSURLSession.sharedSession().dataTaskWith
我有一个安全的 webView,它显示客户加载他的钱包。我传递安全信息 MPIN(如一次性密码)。有问题 @IBOutlet weak var loading: UIActivityIndicator
我有一个方法,它为我解析 JSON,然后在闭包中加载图像并将其保存到磁盘。该方法在 viewDidLoad 中被调用。然后加载表。问题是,当表格加载时,它里面只有一个单元格,因为 dataTaskWi
我想填充一个UITableViewController,因此在我的viewDidLoad中我有以下代码: override func viewDidLoad() { let rc = Rest
我在 Swift 中从 AFNetworking 2.5 迁移到 3.0,并且遇到了 dataTaskWithRequest 方法的问题。此方法位于 AFHTTPSessionManager 父类(s
当我想将 mysql 数据库中的数据填充到类对象中时,我的问题出现了。我试图返回一个对象数组,它返回 nil,然后它以某种方式填充自己。在返回空白数组之前如何使其填充? 这是我的代码和代码输出的屏幕截
我知道这个问题之前已经被问过几十次了,但不幸的是我对 Swift 的了解不够,无法根据我的问题调整这些答案。 基本上,我有一个函数可以向服务器上的 php 脚本发送 POST 请求,但接收响应的时间似
如有必要,我会尝试比较文件(图 block ),以替换手机上的旧文件和网站上的新文件。但是 func pathDir 中的 returnPathFile 被分配了对文件的引用,而无需等待检查并下载新文
我是一名优秀的程序员,十分优秀!