我已经实现了从Windows桌面应用程序转移到iPhone App的客户端 - 服务器。我使用NSStream轮询模式以不同的格式传输数据,但总是作为字符串传输:
if([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
if (nil != output) {
[_arrRisposta addObject:output];
_strRisposta = [NSMutableString stringWithString: output];
}
}
else {
break;
}
}
一切都很完美,但是当我传输PDF文件并保存时,文件就不一样了。当我在UIWebView中加载文件时,页面数是正确的,但没有内容。我保存文件如下:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *dataFile = [docDir stringByAppendingPathComponent:[NSString stringWithFormat:@"temp.%@", @"pdf"]];
if ([fileManager fileExistsAtPath:dataFile]) {
[fileManager removeItemAtPath:dataFile error:nil];
}
[_strContenuto writeToFile:dataFile atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSURL *fileUrl = [NSURL fileURLWithPath:dataFile];
[webModello loadRequest:[NSURLRequest requestWithURL:fileUrl]];
怎么了?我试图改变字符串的编码,但我还没有解决。如果我将传输的文件与原始文件进行比较,则有些字符不匹配。 有人可以帮帮我吗?
答案 0 :(得分:1)
你不应该使用字符串。更改代码以使用NSData对象。 PDF文件不是字符串,并且有各种各样的编码问题,你不必担心这会使用字符串(如果有的话)。
我没有查找NSData的确切api用法,这一切都来自我的脑海......所以不要复制并粘贴它!
// Somewhere in your code
_myData = [[NSMutableData alloc] init];
// when data comes in....
if([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
[_myData addBytes:buffer length:len];
}
}
else {
break;
}
}
// when the callback comes in saying all data there:
[_myData writeToFile:@"path/topdf/file.pdf" atomically:YES];