很抱歉标题不是很清楚,但是很难用一句话来概括问题。
我正在使用 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
Profile 现在可用,因此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 的完成处理程序中),那么它可以工作并且视图会正确显示,但我没有头像二进制文件。但是,如果我在的完成处理程序中调用它,则视图不会显示。它只是回到登录视图。 sendAsynchronousRequest
sendAsynchronousRequest
我是 iOS 开发的新手,但根据我的经验,完成处理程序似乎是在不同的线程中调用的?异步和所有。
那么,如何让视图显示?
谢谢你。