gpt4 book ai didi

ios - 我假设我的程序执行无序,因为某些线程先于另一个线程完成。 NSLock,GDC,有什么建议吗?

转载 作者:行者123 更新时间:2023-11-30 14:10:14 26 4
gpt4 key购买 nike

从编程的角度来看,由于代码的编写方式,我不一定能解决这个问题。

基本上,用伪代码表示:

if NSUserDefaults' stored token exists{

setFlag(token)
// setFlag will make an API call with the token and either set Global.variable to true or leave it at false

if(Global.variable){doThis()}

}

基本上,条件检查发生在 setFlag 完成之前,因此在检查时它永远不会为 true。即使我按照 didSetFlagFinishExecuting 的方式添加第二个全局 bool 值,我也会遇到同样的问题——条件发生在其他问题之前。我把它放在 while 循环中,但由于我编码的方式,它陷入了无限循环。我没有线程锁/GCD 的经验。我宁愿不使用它,但如果必须的话我会的。有什么建议么?

编辑:实际代码

//在viewDidLoad中

let defaults = NSUserDefaults.standardUserDefaults()
if let stringOne = defaults.valueForKey("sessionKey") as? String{
getStatus(stringOne)
if(Global.loggedIn){ // do whatever--won't happen

//作为 ViewController 的扩展

func getStatus(sessionKey: String){
let url : String = "http://whatever" + sessionKey

let request : NSMutableURLRequest = NSMutableURLRequest()
request.URL = NSURL(string: url)
request.HTTPMethod = "GET"
var queue : NSOperationQueue = NSOperationQueue()
var returnString : String = ""

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{(response:NSURLResponse!, responseData:NSData!, error: NSError!) -> Void in

if error != nil
{
println(error.description)
returnString = error.description
}
else
{


var errors: NSError?

let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(responseData!, options: NSJSONReadingOptions.MutableContainers, error: &errors) as! NSDictionary

var tempString = jsonData["last_status"] as! String!
print(tempString)
if (tempString == "loggedin"){
Global.loggedIn = true
}
Global.finished = true
print("hello")




}




}

})




}

因此,如果我在此处打印 Global.loggedIn,则结果为 true。只是这一切都没有及时完成。即使我将其设为返回函数,无论出于何种原因,viewDidLoad 中的条件都会将其读取为 false,然后将打印“hello”。

最佳答案

在这一行中:

if(Global.loggedIn){ // do whatever--won't happen

将您想要发生的任何事情放入一个函数中:

func doWhatever() {
// do whatever
}

然后,在 NSURLConnection 的完成处理程序闭包中,通过添加一行来更改这部分代码:

...
if (tempString == "loggedin"){
Global.loggedIn = true
doWhatever() // <--- Add this line
}
...

尝试一下。让我们知道它是否有效。 :)

关于ios - 我假设我的程序执行无序,因为某些线程先于另一个线程完成。 NSLock,GDC,有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31858712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com