2013-03-20 96 views
2

我有包含byte []条目的.Net Web服务响应以及其他字段。 该数据是一个PDF文件。 [NSJSONSerialization JSONObjectWithData]将字节[]转换为NSData后数据损坏

下面我使用以下代码的字节[]转换为NSData的:

我从与所接收的数据中提取的字典。 然后我将结果保存到磁盘(见最后一行)。

当打开生成的PDF文件,我得到以下错误:

“未能找到PDF标题:`%PDF”找不到”

 NSArray *byteArray = [rootDictionary objectForKey:@"file"]; 

     unsigned c = byteArray.count; 
     uint8_t *bytes = malloc(sizeof(*bytes) * c); 

     unsigned i; 
     for (i = 0; i < c; i++) 
     { 
      NSString *str = [byteArray objectAtIndex:i]; 
      int byte = [str intValue]; 
      bytes[i] = (uint8_t)byte; 
     } 

     NSData* data = [NSData dataWithBytes:(const void *)byteArray length:sizeof(unsigned char)*c]; 

     //Save to disk using svc class. 
     NSString *localPath = [svc saveReport:data ToFile:[rootDictionary objectForKey:@"name"]]; 

我也试过在我的应用程序,其工作的字节[]转换到Base64的NSString(在服务端),然后返回NSData的(**大部分),但有人告诉我,这是马虎代码。

**当在同一时间异步拉取多个PDF时,以base64字符串形式收到的这些报告中的一部分也被破坏。

PS。请让我知道我是否也必须提供我的svc课程的代码,但我认为问题不在那里。

编辑: 我创建了取一个字节[]作为输入,然后修改了我的iOS应用的ByteArray变量送回服务,在那里得到保存到文件中的一个新的Web服务方法。 生成的PDF文件是Adobe可读的有效文件。意味着转移期间不存在腐败现象。

谢谢!

+0

作为一个方面说明,我确认服务器端的文件与生成的NSData大小完全一致。此外,服务器上的文件是在Adobe中成功打开的有效PDF。 – 2013-03-21 13:08:40

回答

5

O.k,在仔细梳理我的代码后(最后由http://www.raywenderlich.com/forums/viewtopic.php?f=2&p=38590#p38590的snadeep.gvn启发),最后把它分类出来。

我犯了一个愚蠢的错误,我忽略了100多次。

这行代码:

NSData* data = [NSData dataWithBytes:(const void *)byteArray length:sizeof(unsigned char)*c]; 

应更改为:

NSData* data = [NSData dataWithBytes:(const void *)bytes length:sizeof(unsigned char)*c]; 

好时光,现在我终于可以睡个安稳觉:-)