- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在转移到 homeView 之前使用 Alamofire 获取用户数据。在下面的代码中,我想在完成获取 jsonObj 数据后调用 self.login() 函数。你能告诉我该怎么做吗?谢谢你的好意。
@IBAction func signInWithTwitter(sender: UIButton) {
Twitter.sharedInstance().logInWithCompletion { (session: TWTRSession!, error: NSError!) -> Void in
if session != nil {
func getTwUserData(completionHandler: (responseObject: NSDictionary?, error: NSError?) -> ()){
let parameters = [
"tw_id":session.userID,
"tw_name" :session.userName,
"tw_token":session.authToken
]
Alamofire.request(.POST, self.uri.usersApi + "/tw_login", parameters: parameters, encoding: .JSON)
.responseJSON { request, response, data, error in
completionHandler(responseObject: data as? NSDictionary, error: error)
var jsonObj = JSON(data!)
var uid = jsonObj["user_id"].int
self.defaults.setObject(uid, forKey: "uid")
}
}
self.login()
} else {
println(error.localizedDescription)
}
}
}
根据 Sash 的建议进行更新。
@IBAction func signInWithTwitter(sender: UIButton) {
Twitter.sharedInstance().logInWithCompletion { (session: TWTRSession!, error: NSError!) -> Void in
if session != nil {
let group = dispatch_group_create()
dispatch_group_enter(group)
let parameters = [
"tw_id":session.userID,
"tw_name" :session.userName,
"tw_token":session.authToken
]
Alamofire.request(.POST, self.uri.usersApi + "/tw_login", parameters: parameters, encoding: .JSON)
.responseJSON { (request, response, data, error) in
var jsonObj = JSON(data!)
println(jsonObj)
var uid = jsonObj["user_id"].int
self.defaults.setObject(uid, forKey: "uid")
dispatch_group_leave(group)
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
print("4 seconds later...")
self.login()
} else {
println(error.localizedDescription)
}
}
}
最佳答案
关于将异步代码变成同步代码,有很多话要说,尤其是在 UI 线程中。我希望你有这样做的理由:)
我认为 Alamofire 没有办法将请求变成同步。
但是,在 Alamofire 之外有多种方法可以实现此目的,其中一种适用于大多数情况的方法是使用 Grand Central Dispatch 组:
let group = dispatch_group_create()
dispatch_group_enter(group)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_SEC * 4))
dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)){
dispatch_group_leave(group)
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
print("4 seconds later...")
您应该将 dispatch_after
替换为您的网络代码,并且不要忘记在成功和失败时dispatch_group_leave
(如果您有单独的处理程序)。
另请记住,这里存在死锁的危险:如果您 dispatch_after
返回主队列,它当前正忙于等待 dispatch_group
完成,这就是原因我正在调度到默认后台队列。
关于swift - 在转移到 homeView 之前通过 Alamofire 获取用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32173081/
This question already has answers here: Using Variable for Thread group Ramp up time (3个答案) 3年前关闭。 从
我希望使用 RPyC 为硬件板提供 API 作为服务。该板一次只能满足一个用户的需求。有什么方法可以让 RPyC 强制执行一次只有一个用户可以访问吗? 最佳答案 我不确定这是否有效(或有效),但您可以
如果我想以每秒 10 个请求运行测试。如何让 Jmeter 选择每秒处理该请求数所需的最佳线程数。 我将线程数设置为与每秒请求数相同。 最佳答案 您可以使用恒定吞吐量计时器 click here你只需
我正在尝试进行查询以检查客户表并返回过去 30 天、过去 365 天和所有时间具有特定值的用户数。 所有时间的计数很简单: $stmt = $conn->prepare("SELECT count(i
我是一名优秀的程序员,十分优秀!