Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 将PDF文件从客户端传输到服务器时出现的问题_Iphone_Objective C_Ios_Xcode_Ipad - Fatal编程技术网

Iphone 将PDF文件从客户端传输到服务器时出现的问题

Iphone 将PDF文件从客户端传输到服务器时出现的问题,iphone,objective-c,ios,xcode,ipad,Iphone,Objective C,Ios,Xcode,Ipad,我已经实现了从Windows桌面应用程序到iPhone应用程序的客户端服务器传输。我以不同的格式传输数据,但始终使用NSStream轮询模式作为字符串: if([inputStream hasBytesAvailable]) { len = [inputStream read:buffer maxLength:sizeof(buffer)]; if (len > 0) { NSString *output = [[NSStri

我已经实现了从Windows桌面应用程序到iPhone应用程序的客户端服务器传输。我以不同的格式传输数据,但始终使用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]];
怎么了?我试图更改字符串的编码,但尚未解决。如果将传输的文件与原始文件进行比较,则会发现一些字符不匹配。
有人能帮帮我吗?

你不应该使用字符串。更改代码以使用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];

谢谢你,汤姆,但是我不能在我的工作中使用NSData。我收到的字符串有一个头和一个尾,用于分隔内容(例如…)。我提取我感兴趣的字符串,然后处理它。如果是PDF格式(例如%PDF-1.4%Chì、5 0 obj…startxref 3114%%EOF),请将其另存为文件并在UIWebView中打开。我被迫使用字符串。我该怎么办?你必须使用你能找到的最小、最简单的PDF文件。比如说它在服务器上的长度是1952字节。然后当你恢复它时,它需要精确到1952字节长。可能会出现类似url的编码或xml编码等。如果您无法控制服务器,并且由于存在其他客户端而“知道服务器工作”,那么这就是胜利的一半。但是,一旦得到相同的字节长度,它可能仍然不起作用。如果您在服务器端也有控制权,我会将pdf作为base64编码字符串传输,然后在客户端对其进行解码。那就行了。另一点-我看到您在写入数据时使用NSUTF8StringEncoding,在加载数据时使用ASCII。如果你想愚弄NSString,那么我想,在任何地方都坚持使用ascii。用Base64编码/解码解决。非常感谢你,汤姆!