2011-09-13 34 views
1

我在NSData中獲取設備令牌並將其轉換爲NSString。在打印設備令牌正確從NSData獲取設備令牌給予異常

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


    deviceToken = [[devToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 



    deviceToken = [deviceToken stringByReplacingOccurrencesOfString:@" " withString:@""]; 


    NSLog(@"Device Token from NSdata is %@",deviceToken); 


} 

而且我通過這個從其他類

self.Token = [AppDelegate_iPhone sharedAppDelegate].deviceToken; 

但它崩潰的這條線

NSLog(@"Device Token from NSdata is %@",deviceToken); 

*** -[CFString respondsToSelector:]: message sent to deallocated instance 0x1f9d00 

回答

3

您只是將值分配給deviceToken。您需要保留該值,否則將立即發佈。

deviceToken = [[deviceToken stringByReplacingOccurrencesOfString:@" " withString:@""] retain]; 
+1

謝謝..這是現在工作,但它爲什麼會被釋放? – iProgrammer

+0

@IphoneDeveloper'stringByReplacingOccurencesOfString:'返回一個自動釋放的對象。如果你不希望它被釋放(在運行循環結束時),你需要保留這個值。 – Jilouc

+0

非常感謝這個信息.. :) – iProgrammer

0

這裏是如何我都做到了在過去:

const void *devTokenBytes = [devToken bytes];
NSString *deviceToken = [[[[devToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""];

+0

我也試過這個..沒有問題獲取設備令牌。在使用它在另一個類的問題 – iProgrammer