我的.Net Web服务响应包含byte []条目,以及其他字段。 数据是PDF文件。
我从收到的数据中提取词典: [NSJSONSerialization JSONObjectWithData]
此后我使用以下代码将byte []转换为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"]];
我也尝试将byte []转换为base64 NSString(在服务端),然后返回到我的应用程序中的NSData,其工作(大多数情况下都是**),但我被告知它是邋code的代码。
**同时异步提取多个PDF时,其中一些以base64字符串形式收到的报告也已损坏。
PS。如果我必须提供我的svc课程的代码,请告诉我,但我认为问题不存在。
修改 我创建了一个新的Web服务方法,它接受一个byte []作为输入,然后修改我的iOS应用程序,将byteArray变量发送回服务,然后将其保存到文件中。 生成的PDF文件是Adobe可读的有效文件。这意味着在转移期间没有腐败。
谢谢!
答案 0 :(得分: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];
美好的时光,现在我终于可以睡一觉了: - )