2011-09-13 94 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