2014-10-10 5 views
1

Я столкнулся с какой-то странной проблемой. На самом деле метод ViewDidLoad ViewController назвал перед тем didRegisterForRemoteNotificationsWithDeviceToken методом AppDelegate вios DeviceToken: Как передать deviceToken из AppDelegate в ViewController?

код в AppDelegate выглядит следующим образом

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
{ 
    NSLog(@"My token is: %@", deviceToken); 

    NSString* newToken = [deviceToken description]; 
    newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
    newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    NSLog(@"token:%@",newToken); 
    NSUserDefaults *defaultValues = [NSUserDefaults standardUserDefaults]; 
    [defaultValues setValue:newToken forKey:key_device_token]; 
    [defaultValues synchronize]; 
} 

Код метода ViewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    NSLog(@"ABCD"); 
} 

Ниже Консольный вывод

014-10-10 16:59:15.590 FollowMe[650:60b] ABCD 
2014-10-10 16:59:15.592 FollowMe[650:60b] app dir: file:///var/mobile/Applications/94B3DF5E-B0CB-4F0B-99E7-2DFEBDC30ECB/Documents/ 
2014-10-10 16:59:15.693 FollowMe[650:60b] My token is: <3fff5f77 d15d7680 f8028b92 d1ebaf9b 06457115 336f1ee5 56172de6 5d8217c5> 
2014-10-10 16:59:15.695 FollowMe[650:60b] token:3fff5f77d15d7680f8028b92d1ebaf9b06457115336f1ee556172de65d8217c5 

Любой человек может сказать мне, что это проблема с моим кодом?

ответ

0

Установите метод делегата в AppDelegate, который вы вызываете, когда закончите didRegisterForRemoteNotificationsWithDeviceToken. Прикрепите контроллер к делегату, так как он будет уведомлен о регистрации уведомления.

0

Ничего, вы зарегистрируете свое приложение для «Push Notification» и ждите токена от «Apple». Когда вы получаете это нормально, ваше приложение создаст ваш viewcontroller.

В методе:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 

сообщить Вам ViewController о маркере. У вас есть несколько вариантов, которые лучше подходят для вашей архитектуры приложения.

Если вам нужно больше деталей, отличный учебник о APNS: http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1

1
  1. Использование может сохранить маркер в NSUserdefault, файла, базы данных (SQLite, CoreData, файл и т.д. ...), Simple, вы можете сохранить его в глобальной переменной, singleton ...
  2. Вы можете использовать Push-уведомление, чтобы уведомить об успешном регистрации делегата приложения для удаленного уведомления.
  3. вы можете определить протокол, чтобы прослушать регистр успеха делегата приложения для удаленного уведомления.
0
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
{ 
NSLog(@"My token is: %@", deviceToken); 

NSString* newToken = [deviceToken description]; 
newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""]; 
NSLog(@"token:%@",newToken); 
NSUserDefaults *defaultValues = [NSUserDefaults standardUserDefaults]; 
[defaultValues setValue:newToken forKey:key_device_token]; 
[defaultValues synchronize]; 

[[NSNotificationCenter defaultCenter] postNotificationName:@"profileUpdated" object:nil]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(printDeviceID:) 
               name:@"profileUpdated" 
               object:nil]; 
} 


- (void) printDeviceID:(NSNotification *) notification 
{ 
    if ([notification.name isEqualToString:@"profileUpdated"]) 
{ 
    NSUserDefaults *defaultValues = notification.info; 

} 
} 
Смежные вопросы