我有一个 iPad 应用程序,可以从后端下载视频、图像和 pdf 文件,但一段时间后(下载 400 mb 后)应用程序崩溃并且控制台将 gdb 打印回来。下
这是我用于视频文件的写入功能的一部分。
更新
如果我释放 NSData 对象“mediaDataResponse”,应用程序会下载所有文件,但在下载所有文件后给我一个 EXC_BAD_ACCES 错误。
有什么帮助吗?
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *imageCacheDirPath = [docsPath stringByAppendingPathComponent"video"];
if (![[NSFileManager defaultManager] fileExistsAtPath:imageCacheDirPath])
{
[[NSFileManager defaultManager] createDirectoryAtPath:imageCacheDirPath
withIntermediateDirectories:NO
attributes:nil
error:NULL];
}
NSString *filename = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat"/Documents/video/%@.%@",cacheFileName,extensionstring]];
[mediaDataResponse writeToFile:filename options: NSDataWritingAtomic error: &error];
//Thumbnail
NSArray *thumbpaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *thumbdocsPath = [thumbpaths objectAtIndex:0];
NSString *thumbimageCacheDirPath = [thumbdocsPath stringByAppendingPathComponent"thumbnail"];
if (![[NSFileManager defaultManager] fileExistsAtPath:thumbimageCacheDirPath])
{
[[NSFileManager defaultManager] createDirectoryAtPath:thumbimageCacheDirPath
withIntermediateDirectories:NO
attributes:nil
error:NULL];
}
NSURL *thumburl = [NSURL URLWithString:media.mediaThumbnail];
NSData *thumburlData = [NSData dataWithContentsOfURL:thumburl];
NSString *thumbfilename = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat"/Documents/thumbnail/%@.jpg", thumbcacheFileName]];
[thumburlData writeToFile:thumbfilename options: NSDataWritingAtomic error: &error];
}
当您在崩溃后启动应用程序时,它会继续下载它停止的位置。有人有同样的问题吗?提前致谢。
Best Answer-推荐答案 strong>
我认为您可能正在尝试将所有 400MB 的文件加载到内存中(基于 NSData 使用情况),这可能不是正确的方法(您的 LowMemory 评论证实了这一点)。您可能希望拥有自己的 NSURLConnection 委托(delegate),该委托(delegate)在收到响应时打开文件,并将所有字节直接附加到该文件(而不是将其保存在 NSData 中)。
关于ios - 将文件下载到设备时 iPad 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/9733729/
|