【发布时间】:2017-03-24 11:21:44
【问题描述】:
我是开发 IOS 应用程序的初学者。现在我想从 AppDelegate 中的方法向 mainViewController 发送 refreshToken 数据。 我第一次下载时无法获取。但第二次我可以得到它。 我认为第一次创建它需要一些时间,然后再存储它。 请帮助我,如何从 AppDelegate 向 ViewController 发送数据。最终,我想将它存储到数据库并从服务器端向用户发送推送通知消息。 我使用以下代码。
//AppDelegate.h
@class ViewController;
#import <UIKit/UIKit.h>
#import "ViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (weak, nonatomic) ViewController *myViewController;
@property (strong, nonatomic) UIWindow *window;
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end
//AppDelegate.m
- (void)tokenRefreshCallback: (NSNotification *)notification {
NSString *refreshToken = [[FIRInstanceID instanceID] token];
NSLog(@"InstanceID token: %@", refreshToken);
//
if(refreshToken){
[[NSUserDefaults standardUserDefaults] setObject:refreshToken forKey:@"token"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
// Connect to FCM since connection may have failed when attempted before having a token.
[self connectToFirebase];
}
//ViewController.h
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
@interface ViewController : UIViewController
@end
//ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.myViewController = self;
//get tokenId
NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"token"];
if(token){
NSLog(@"i have token~!!!: %@ ", token);
}else NSLog(@"no token!: %@ ", token);
// Do any additional setup after loading the view, typically from a nib.
}
谢谢大家。
【问题讨论】:
-
好的,所以你不是第一次获得代币价值,对吧?
-
什么方法触发
tokenRefreshCallback的通知?它看起来是异步的——所以当你第一次从你的 ViewController 调用它时,令牌还没有设置。第二次,回调被调用并保存了令牌。
标签: ios objective-c viewcontroller appdelegate