NSURLConnection.sendAsynchronousRequest issue



很抱歉标题不清晰,但很难用一句话来恢复问题。

我正在使用 Facebook SDK 来检索用户信息。我的目的是实例化我自己编写的一个名为 Profile 的类,其中包含多个用户信息,包括头像图片的二进制文件 ( NSData (。

为此,我首先使用 FBRequestConnection.startWithGraphPath,然后在完成处理程序中,我创建一个 Profile 实例并使用 NSURLConnection.sendAsynchronousRequest:queue:completionHandler:

一旦我得到完整的个人资料,我就会通知代表didReceiveProfile:.现在,委托是 LoginViewController ,它是 UIViewController 的一个子类。然后,此方法将配置文件数据保存到磁盘,然后执行以下操作:

var app: UIApplication = UIApplication.sharedApplication();
var delegate: AppDelegate = app.delegate as AppDelegate;
delegate.application(app, didReceiveProfile: profile);

因此,我们的想法是通知AppDelegate配置文件现在可用,因此现在可以显示LoginViewController后面的任何视图控制器。这是代码:

var storyboard: UIStoryboard = UIStoryboard(name: MainStoryboardIdentifier, bundle: nil);
var profileVC: ProfileViewController! = storyboard.instantiateViewControllerWithIdentifier(ProfileViewControllerIdentifier) as ProfileViewController;
NSLog("Everything OK");
self.navigationController!.pushViewController(profileVC, animated: false);

我确实得到了日志"一切正常",但视图没有显示。

更多细节。

首次加载应用程序时,它会检查配置文件是否已保存到磁盘。如果有,它会从文件中加载配置文件并调用立即跳转到第二个屏幕的didReceiveProfile:。因此,调用相同的方法并且它有效。它不可能是代码。

另外,请注意,NSURLConnection.sendAsynchronousRequest:queue:completionHandler:是在FBRequestConnection.startWithGraphPath的完成处理程序中调用的。如果我sendAsynchronousRequest之前调用委托的didReceiveProfile:方法(即在 Facebook 的完成处理程序中(,那么它可以工作并且视图正确显示,但我没有头像二进制文件。但是如果我在 sendAsynchronousRequest 的完成处理程序中调用它,则视图不会显示。它只是回到登录视图。

我是iOS开发的新手,但根据我的经验,似乎在不同的线程中调用了完成处理程序?异步和所有。

那么,如何显示视图呢?

谢谢。

好吧,我意识到我遗漏了一些非常重要的东西。当我这样做时,我也意识到问题是什么。我是这样打电话给sendAsynchronousRequest的:

var request = NSURLRequest(URL: url);
let queue = NSOperationQueue();
NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ /* RESPONSE CODE */ });

显然队列不对。它应该是:

let queue = NSOperationQueue.mainQueue();

这就解决了。

相关内容

  • 没有找到相关文章

最新更新