我正在寻找一些关于处理这种情况的最佳方法的建议:
在我的appDelegate中,我在registerForRemoteNotificationTypes
中拨打didFinishLaunchingWithOptions
,如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Let the device know we want to receive push notifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
[[self window] setBackgroundColor:[UIColor blackColor]];
[self.navigationController setNavigationBarHidden:YES];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
但是,在我的应用程序可以继续之前,我需要等待设备令牌返回,所以我想知道在继续之前等待这个的最佳位置是什么?目前我的viewDidLoad
被调用,但我有时会失败,因为设备令牌还没有回来。
我在想我可以将代码从viewDidLoad
移到myViewDidLoad
,并且希望我等待收到设备令牌然后再调用myViewDidLoad
后发生的通知
但是,我不知道在哪里设置通知。我知道这是一个基本问题,但我还在学习iOS。
任何建议都会有所帮助。
答案 0 :(得分:3)
你不等。永远,永远不要等待。
在处理网络等异步内容时(如此处所示),您必须以一种某些方式继续编写应用程序,即使网络还没有发生。就这么简单。
你的第二次冲动更为正确。当您在应用程序委托中获得远程通知时(我假设),应用程序委托可以与相关的视图控制器通信并为其提供新信息并告诉它自行更新(然后视图控制器可以更新视图显示该点显示的任何需求。)
既然您知道自己需要这样做,那么您需要设置视线"提前沟通。您可以在应用程序代理中掌握所有拼图,这样您就可以安排继续使用该视图控制器的引用,以便以后再需要它。
答案 1 :(得分:0)
我用我的解决方案发表了对我的问题的评论。不理想,但它现在有效。