我有一个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];
}
在崩溃后启动应用程序时,它只会继续下载停止的位置。有人有同样的问题吗?提前谢谢。
答案 0 :(得分:2)
我认为您可能正在尝试将所有400MB的文件加载到内存中(基于NSData使用情况),这可能不是正确的方法(并由您的LowMemory
评论证实)。您可能希望拥有自己的NSURLConnection委托,该委托在收到响应时打开文件,并将所有字节直接附加到该文件(不将其保留在NSData中)。