我有一个NSData对象。
我想将其转换为字符串,传递给函数,然后重新转换回NSData对象。
但是怎么样?
我试过这个方法,但是NSData的价值与原来不同!
这里是我的代码:
// a generic class
APClass *c = [[APClass alloc] init];
c.aNumber = 123;
c.aString = @"my string";
// my data obj
NSMutableData *data = [NSMutableData data];
// archiver to store class in nsdata
NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[encoder encodeObject:[NSNumber numberWithInt:c.aNumber] forKey:@"aNum"];
[encoder encodeObject:c.aString forKey:@"aStr"];
[encoder finishEncoding];
[encoder release];
[c release];
NSLog(@"%@", data);
NSString *d = [NSString stringWithFormat:@"%@", data];
// ---
NSString *strFromData = [NSString stringWithFormat:@"%@", d];
NSData *dataNM = [strFromData dataUsingEncoding:NSUTF8StringEncoding];
// decoder to retrieve class from nsdata
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:dataNM];
int number = [[decoder decodeObjectForKey:@"aNum"] intValue];
NSString *string = [decoder decodeObjectForKey:@"aStr"];
[decoder finishDecoding];
[decoder release];
NSLog(@"[Number: %d] -- [String: %@]", number, string);
如何转换回原始NSData?
数据和dataNM的大小不同。 编译器给出了这个错误:
2012-04-02 16:33:28.269 DataTest [18008:f803] - [__ NSCFData objectForKey:]:无法识别的选择器发送到实例0x6b46c80
2012-04-02 16:33:28.270 DataTest [18008:f803] * 终止app到期 未捕获的异常'NSInvalidArgumentException',原因: ' - [__ NSCFData objectForKey:]:发送到实例的无法识别的选择器 0x6b46c80'
感谢。
答案 0 :(得分:5)
使用dataUsingEncoding
,NSData的值不同。
要传递方法或应用程序等数据,我使用了base64转换。
NSString *d =
[NSString stringWithFormat:@"appdue://obj=%@",
[APBase64Converter base64forData:data]];
NSData *data = [APBase64Converter base64DataFromString:urlParams];
APBase64Converter 是一个可以轻松编码/解码数据和字符串的库。
可以从此处下载工作示例和 APBase64Converter lib:http://goo.gl/8YNjS
谢谢大家。
我“保留”此帖可以帮助我和下次的人!
答案 1 :(得分:0)
使用
NSData
至NSString
:
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding
和
NSString
至NSData
:
- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding
带编码
NSUTF8StringEncoding
或
NSMacOSRomanStringEncoding
(这是一种8位编码)。
答案 2 :(得分:-1)
使用github中提供的Base64类
DatabaseResult* result = [self.database executeQuery:@"SELECT * FROM `images` WHERE image_id = ? AND imagetype = ?", self.routeId,self.imagetype];
for(EGODatabaseRow* row in result) {
NSString *strImage=[row stringForColumn:@"image_photo"];
[Base64 initialize];
NSData *data = [Base64 decode:strImage];
UIImage *image=[UIImage imageWithData:data];
}
这就是我将String转换为数据然后将数据转换为图像的方式。