ios - 将文件下载到设备时 iPad 应用程序崩溃

标签 ios ipad download gdb nsdata

我有一个 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];

            }

当您在崩溃后启动应用程序时,它只会在停止的地方继续下载。有人遇到同样的问题吗?提前致谢。

最佳答案

我认为您可能会尝试将所有 400MB 的文件加载到内存中(基于 NSData 使用情况),这可能不是正确的方法(并由您的 LowMemory 评论证实)。您可能希望拥有自己的 NSURLConnection 委托(delegate),该委托(delegate)在收到响应后打开一个文件,并将所有字节直接附加到该文件(不将其保存在 NSData 中)。

关于ios - 将文件下载到设备时 iPad 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9733729/

相关文章:

android - 无法构建来自 AsyncTask 的进度对话框的更新进度

c# - 从服务器下载文件(不下载?)

ios - 如何向 Root View 而不是 TopLayoutGuide 添加约束?

ios - CollectionView 未按预期垂直显示

ios - 显示 View Controller 会导致稍后出现问题

ios - Fiddler - 从 iPad 应用程序捕获和解密 HTTPS 流量

python-3.x - python中网络抓取期间的json错误转储

ios - 为 iPhone 和 iPad 启动屏幕选择不同的背景图像

objective-c - 如何在 iTunes 中设置来自歌曲的声音本地通知?

ipad - 如何在弹出 Controller 中设置带标题的导航栏