2012-12-05 2 views
1

J'ai la méthode suivante dans mon AppDelegate.m. Je veux que la valeur de deviceToken dans mon UIViewControlleren passant des données d'appdelegate à viewcontroller

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
{ 
NSLog(@"My token is: %@", deviceToken); 
ViewController *viewController = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; 
viewController.tokenStr = [NSString stringWithFormat:@"%@",deviceToken]; 
} 

mais quand j'affichage NSLog(@"%@",tokenStr); dans UIViewController Je reçois (NULL). comment puis-je obtenir la valeur dans mon UIViewController?

+0

Comment montrez-vous 'ViewController'? ajoutez ceci juste avant de pousser cet objet. – iDev

+0

désolé, je ne comprends pas ce que vous voulez dire? –

+0

Pouvez-vous s'il vous plaît poster le code que vous avez écrit pour montrer ViewController sur l'écran. Le code ci-dessus crée juste un objet et ne fait rien d'autre. Il devrait y avoir quelque chose par lequel vous l'affichez sur l'écran. Vous devez ajouter ceci là. – iDev

Répondre

3

En AppDelegate, vous pouvez enregistrer la valeur deviceToken dans NSUserDefaults comme

[[NSUserDefaults standardUserDefaults] setObject:deviceToken forKey:@"DeviceToken"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

et récupérer cette valeur de tout View Controller en utilisant

[[NSUserDefaults standardUserDefaults] objectForKey:@"DeviceToken"]; 
+0

Je reçois toujours la valeur NULL. –

+0

Où vous l'exécutez, Device ou iOS Simulator. Si vous l'exécutez sur Simulator, il retournera toujours NULL.Essayez-le dans Device. – arthankamal

+0

Je l'utilise sur l'appareil. quand je l'ai couru pour la 1ère fois, il montre null après cela il montre la valeur, pourquoi est-ce? –

1

Vous pouvez avoir une référence à AppDelegate avec [UIApplication sharedApplication].delegate.
Cela dépend de vos besoins. Quelque chose comme un jeton que vous devriez vraiment enregistrer dans NSUserDefaults, il a été conçu pour enregistrer les informations d'identification et les jetons de l'utilisateur. Mais si vous voulez utiliser toutes les propriétés et méthodes publiques de AppDelegate dans un viewController, vous pouvez utiliser son délégué.

AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; 
NSString *token = appDelegate.token; 
1

En classe AppDelegate.m:

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

    NSString *device = [deviceToken description]; 
    device = [device stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
    device = [device stringByReplacingOccurrencesOfString:@" " withString:@""]; 

    NSLog(@"My device is: %@", device); 

    [[NSUserDefaults standardUserDefaults] setObject:device forKey:@"MyAppDeviceToken"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

En classe ViewController, à l'intérieur méthode viewDidLoad:

[super viewDidLoad]; 

    NSString *deviceToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyAppDeviceToken"]; 
    NSLog(@"device token in controller: %@ ", deviceToken); 

Cela fonctionne parfaitement dans mon appareil. Codage heureux !! :)

Questions connexes