xcode – 此应用程序正在从后台线程修改autolayout引擎,这可能导
发布时间:2020-12-15 01:49:04 所属栏目:百科 来源:网络整理
导读:我收到此错误此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃.这将导致未来版本中的异常.我不知道是什么导致了这个错误.有谁能够帮助我. func getUserDataFromTwitterWithUser(user : PFUser) {//NRLoader.showLoader()let strT
我收到此错误此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃.这将导致未来版本中的异常.我不知道是什么导致了这个错误.有谁能够帮助我.
func getUserDataFromTwitterWithUser(user : PFUser) { //NRLoader.showLoader() let strTwURL = "https://api.twitter.com/1.1/users/show.json? screen_name="+PFTwitterUtils.twitter()!.screenName! + "&access_token="+PFTwitterUtils.twitter()!.authToken! let twURL = NSURL (string: strTwURL) let request = NSMutableURLRequest(URL: twURL!,cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy,timeoutInterval: 2.0) as NSMutableURLRequest PFTwitterUtils.twitter()?.signRequest(request) let session = NSURLSession.sharedSession() session.dataTaskWithRequest(request,completionHandler: {(data,response,error) in if error == nil { var jsonOptional = Dictionary<String,AnyObject>() do { jsonOptional = try NSJSONSerialization.JSONObjectWithData(data!,options:NSJSONReadingOptions.MutableContainers ) as! Dictionary<String,AnyObject> // use jsonData } catch { // report error } var userName = "" if let screenName = jsonOptional["screen_name"] as? String{ userName = screenName } else if let name = jsonOptional["name"] as? String{ userName = name } var profilePicUrl = "" if let picUrl = jsonOptional["profile_image_url"] as? String{ profilePicUrl = picUrl } AppUser.currentUser()?.username = userName AppUser.currentUser()?.profileAwsURL = profilePicUrl //NRLoader.hideLoader() //if ParseUtils.isLoggedInUserIsAnonymous() { let signUpVC:SignMeUpViewController = self.storyboard!.instantiateViewControllerWithIdentifier("SignMeUpViewController") as! SignMeUpViewController signUpVC.isFromLogin = true self.navigationController!.pushViewController(signUpVC,animated: true) //} else { // self.pushToSubmitDreamViewController() //} } else { //NRLoader.hideLoader() NRToast.showToastWithMessage(error!.description) } }).resume() } 解决方法
dataTaskWithRequest调用在后台运行,然后从同一个线程调用完成处理程序.更新UI的任何内容都应该在主线程上运行,因此所有当前的处理程序代码都应该在dispatch_async中回到主队列中:
dispatch_async(dispatch_get_main_queue()) { // Do stuff to UI } 斯威夫特3: DispatchQueue.main.async() { // Do stuff to UI } 因此,理想情况下,如果error == nil,当前所有代码都应该在另一个函数中关闭,比如称为handleRequest,因此您当前的代码变为: session.dataTaskWithRequest(request,error) in if error == nil { dispatch_async(dispatch_get_main_queue(),{ self.handleRequest(...)I }) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |