我的X-Code项目中有一个250Mb加密的PDF文件,我需要在运行时解密和显示。由于文件大小很大,我无法解密。所以我将原始文件拆分为NSData块,将它们加密成不同的部分文件。在代码中,我正在解密这些多个块并将它们写入同一个文件然后显示它。
NSData *decryptedData = [[NSData alloc] init];
NSString *thepath = [NSString stringWithFormat:@"%@/decryptedfile.%@",[paths objectAtIndex:0], fileType];
[decryptedData writeToFile:thepath atomically:YES];
[decryptedData release];
NSFileHandle *myFile = [NSFileHandle fileHandleForUpdatingAtPath:thepath];
[myFile truncateFileAtOffset:0];
for (int k=1; k<50; k++) { //i had 49 parts, hence the condition
NSString *partFilePath = [NSString stringWithFormat:@"%@/%@-part%d.pdf",[paths objectAtIndex:0], [fileName objectAtIndex:i], k];
NSData *tempDData = [[NSData alloc] initWithContentsOfFile:partFilePath];
[myFile writeData:[tempDData AES256DecryptWithKey:@"secretkey"]];
[tempDData release];
}
[myFile closeFile];
我有49个部分,并且正在解密它们,将它们写入单个文件。该程序在模拟器中运行良好,能够恢复原始PDF。但是在设备上,我的应用程序被终止了。 当for循环迭代第31次并且我尝试将我的解密数据写入应用程序的Documents文件夹时,它会被终止。换句话说,当我尝试添加超过150MB的数据时,我的应用程序终止。有没有其他方法可以实现此功能?
答案 0 :(得分:0)
尝试拨打
[myFile synchronizeFile];
每次迭代;这会刷新缓冲区。如果这不起作用,我猜你需要低于基金会,需要在BSD级别直接使用无缓冲的io。