2014-01-13 82 views
-2

我的iOS deviceToken這樣如何刪除空白空間和「< >」

< 72c7f0 e943d3 36713b 827e23 4337e3 91ad 2eecc4>

現在,我要刪除空白空間和「<」 「>」,去 72c7f0e943d336713b827e234337e391ad2eecc4

我能爲這個做什麼?

另一個問題是

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSString *deviceString = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@",deviceString); 
} 

但輸出爲 「null」,爲什麼?

+1

只要在這裏看看靈魂:http://stackoverflow.com/questions/1587407/iphone-device-token-nsdata-or-nsstring。 在發佈一個新問題之前,請至少嘗試幾分鐘。 –

+1

比你,因爲我的英文很差,所以..我下次會小心 –

回答

3
NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
token   = [token stringByReplacingOccurrencesOfString:@" " withString:@""]; 
+0

謝謝,我的問題已經解決了 –

0

要更換任何字符串的任何字符/字符串,你可以使用:

[yourString stringByReplacingOccurrencesOfString:strToBeReplaced withString:strToBeReplacedWith]; 

在你的情況,你可以使用這個:

NSString * str= @"<72c7f0 e943d3 36713b 827e23 4337e3 91ad 2eecc4>";  
str = [str stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
str = [str stringByReplacingOccurrencesOfString:@">" withString:@""]; 
str = [str stringByReplacingOccurrencesOfString:@" " withString:@""]; 

您也可以使用這個(取自this question):

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

只需使用此代碼

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
    { 
    NSLog(@"My token is: %@", deviceToken); 
    NSString *devToken; 
    devToken = [[[[deviceToken description] 
         stringByReplacingOccurrencesOfString:@"<"withString:@""] 
         stringByReplacingOccurrencesOfString:@">" withString:@""] 
         stringByReplacingOccurrencesOfString:@" "withString:@""]; 
     NSLog(@"%@",devToken); 
    } 
0

您可以使用以下代碼如下:

NSString *newString1 = [deviceString stringByReplacingOccurrencesOfString:@" " withString:@""]; 
NSString *newString2 = [newString1 stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
NSString *finalString = [newString2 stringByReplacingOccurrencesOfString:@">" withString:@""]; 
NSlog("%@",finalString); 
0

使用此代碼。

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

    NSString *newToken = [deviceToken description]; 
     newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
     self.deviceToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""]; 
     } 
0

寫下面的方法在您的視圖控制器.m文件

-(NSString*)contentsInParenthesis:(NSString *)str 
{ 
    NSString *subString = nil; 
    NSRange range1 = [str rangeOfString:@"<"]; 
    NSRange range2 = [str rangeOfString:@">"]; 
    if ((range1.length == 1) && (range2.length == 1) && (range2.location > range1.location)) 
    { 
     NSRange range3; 
     range3.location = range1.location+1; 
     range3.length = (range2.location - range1.location)-1; 
     subString = [str substringWithRange:range3]; 
    } 
    return subString; 
} 

,並使用此方法,如:

NSString *string = @"<72c7f0 e943d3 36713b 827e23 4337e3 91ad 2eecc4>"; 
NSString *str=[self contentsInParenthesis:string]; 

現在,海峽的印刷描述: 72c7f0 e943d3 36713b 827e23 4337e3 91ad 2eecc4

2

你問爲什麼這不起作用:

NSString *deviceString = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding]; 

這是因爲initWithData假定NSData包含UTF8字符串。但在你的情況下,deviceToken不是UTF8字符串;它是二進制數據。

你的問題的其餘部分假定您將創建<72c7f0 e943d3 36713b 827e23 4337e3 91ad 2eecc4>字符串(大概是你與stringWithFormatdescription方法創建),和你問如何修剪<>,並刪除空格。 (我認爲其他人已經回答了這個問題。)

雖然我可能會提出一種不同的方法。你可以簡單地有一個程序直接創建十六進制字符串,像這樣:

NSString *deviceString = [self hexadecimalStringForData:deviceToken]; 

然後,您可以有一個像hexadecimalStringForData方法,以便:

- (NSString *)hexadecimalStringForData:(NSData *)data 
{ 
    NSMutableString *hexadecimalString = [[NSMutableString alloc] initWithCapacity:[data length] * 2]; 
    uint8_t byte; 

    for (NSInteger i = 0; i < [data length]; i++) 
    { 
     [data getBytes:&byte range:NSMakeRange(i, 1)]; 
     [hexadecimalString appendFormat:@"%02x", byte]; 
    } 

    return hexadecimalString; 
} 

您當然可以使用description/stringWithFormat方法和然後像其他人所建議的那樣清理那個字符串,但上述內容讓我覺得這是一個更直接的解決方案。

+0

非常感謝,我明白了 –