0

很抱歉标题不是很清楚,但是很难用一句话来概括问题。

我正在使用 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);

所以想法是通知AppDelegateProfile 现在可用,因此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调用了委托的didReceiveProfile:方法(即在 Facebook 的完成处理程序中),那么它可以工作并且视图会正确显示,但我没有头像二进制文件。但是,如果我在的完成处理程序中调用它,则视图不会显示。它只是回到登录视图。 sendAsynchronousRequestsendAsynchronousRequest

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

那么,如何让视图显示?

谢谢你。

4

1 回答 1

0

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

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

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

let queue = NSOperationQueue.mainQueue();

那解决了它。

于 2014-07-08T09:47:03.823 回答