Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何将NSData作为NSString传递并取回?_Iphone_Objective C_Ipad_Nsstring_Nsdata - Fatal编程技术网

Iphone 如何将NSData作为NSString传递并取回?

Iphone 如何将NSData作为NSString传递并取回?,iphone,objective-c,ipad,nsstring,nsdata,Iphone,Objective C,Ipad,Nsstring,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];

我有一个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

data和dataNM的大小不同。 编译器返回此错误:

2012-04-02 16:33:28.269数据测试[18008:f803]-[\uu NSCFData] objectForKey::发送到实例0x6b46c80的选择器无法识别

2012-04-02 16:33:28.270数据测试[18008:f803]*终止应用程序到期 未捕获异常“NSInvalidArgumentException”,原因: '-[\uu NSCFData objectForKey:]:发送到实例的选择器无法识别 0x6b46c80'

谢谢。

使用
NSData
NSString

-(id)initWithData:(NSData*)数据编码:(NSStringEncoding)编码


NSString
NSData

-(NSData*)数据使用编码:(NSStringEncoding)编码

使用编码
NSUTF8StringEncoding


NSMacOSRomanStringEncoding
(这是一种8位编码)。

已解决。 使用
datausingencode
,NSData的值是不同的

为了在方法或应用程序等周围传递数据,我使用了base64转换

编码 解码 APBase64Converter是一个易于对数据和字符串进行编码/解码的库

工作示例和apbase64转换器库可从此处下载:

谢谢大家


我“保留”这篇文章是为了下次帮助别人和我

使用Base64类它在github中可用

        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];

        }

这就是我如何将字符串转换为数据,然后将数据转换为图像。

我需要使用
NSKeyedArchiver
来存储NSData<代码>数据使用编码已被使用。您认为这就是问题所在吗?在创建NSData字符串时,
data
的值没有设置为任何值,它只是一个空的
NSMutableData
。从NSString获取NSData时,什么是NSString?更一般地说,您想要完成什么?
[encoder finishEncoding]对初始为空的数据值进行取值。我需要使用
NSKeyedArchiver
在两个应用程序之间传递整个类。是的,
d
是以前创建的字符串。为什么要转换为
NSString
,为什么不作为
NSData
传递?有没有办法使用苹果提供的函数而不是第三方库来实现这一点?我不知道。我在所有项目中使用我的库。:)好的,接下来的问题。苹果是否已将一个应用程序加入包含此库的应用商店,或者这只是一个个人/越狱项目?是的,它使用类似这样的简单功能。代码没什么奇怪的。什么是DatabaseResult?电子数据库行?Base64?这是我从数据库获取Base64字符串的方式。关于Base64,我已经在回答的顶部提到了它。
NSData *data = [APBase64Converter base64DataFromString:urlParams];
        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];

        }