2012-12-18 1 views
2

Bon après-midi. Je suis brésilien alors excusez-moi pour toute erreur en anglais! J'envoie des notifications push à mon propre appareil. Je peux obtenir mon deviceToken dans mon AppDelegate.m:Comment obtenir le devicetoken dans une autre classe qui n'est pas l'AppDelegate?

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { 
    NSLog(@"Device Token Global : %@", deviceToken); 
} 

Mais j'ai une classe appelée LoginViewController.m où je me logue et POST du deviceToken à un webservice (qui insère dans une table mySQL). Comment puis-je obtenir cette deviceToken en tant que chaîne dans ma classe LoginViewController.m?

+0

Qu'est-ce que vous avez actuellement la manière du composant de modèle de votre application, en termes modèle-vue-contrôleur? – Tommy

Répondre

9

Convertir le jeton à une chaîne:

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

magasin le jeton à NSUserDefaults en utilisant une clé spécifique à l'application de votre choix:

[[NSUserDefaults standardUserDefaults] setObject:tokenString forKey:@"MyAppSpecificGloballyUniqueString"]; 

Ensuite, récupérer ailleurs dans votre application:

NSString *tokenString = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyAppSpecificGloballyUniqueString"]; 

Vous n'avez pas avez pour utiliser NSUserDefaults. Vous pouvez utiliser n'importe quel type d'état global, d'objet singleton, de registre ou d'injection de dépendance pour transmettre la valeur. Comment vous faites cela est à vous; c'est simplement un exemple.

+3

Merci pour le code ci-dessus. Seule la dernière ligne n'a pas fonctionné pour moi. Au lieu de 'stringforKey', j'ai utilisé' objectforKey' et cela a fonctionné parfaitement. :) –

+0

Dûment noté. Merci pour la correction. – warrenm

+0

J'essayais de résoudre ce problème depuis quelques jours, jusqu'à ce que je trouve votre version, qui fonctionne parfaitement! Je vous remercie! – RydelHouse

0

Utilisez une classe singleton et créez une chaîne de périphérique (deviceString).

singletonObject.deviceString = [deviceToken description]; 
singletonObject.deviceString = [tokenString stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
singletonObject.deviceString = [tokenString stringByReplacingOccurrencesOfString:@" " withString:@""]; 

Maintenant, vous pouvez utiliser le singletonObject.deviceString dans une autre classe

Questions connexes