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

时间:2012-03-16 07:57:33

标签: 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];

            }

在崩溃后启动应用程序时,它只会继续下载停止的位置。有人有同样的问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

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