2014-02-13 2 views
0

Я использую Dropbox sync api для загрузки текстового файла и загрузки видеофайла из/в Dropbox через приложение ios.Dropbox sync api загрузка большого видеофайла

Я борюсь при загрузке тяжелого видеофайла. Пока я загружаю видеофайл продолжительностью от 15 до 20 минут, он загружается правильно, но если продолжительность составляет более 25 минут , тогда он получает память и падает на компьютер.

Я использую этот код на кнопку загрузки действия

DBPath *paths=[[DBPath root] childPath:[self.allVideoArray objectAtIndex:Selectedvideo]]; 
DBFile *createfile=[filesystem createFile:paths error:nil]; 
NSData *data=[[NSData alloc]initWithContentsOfFile:self.path]; 
[createfile writeData:data error:nil];  
[data relese]; 

Пожалуйста, некоторые тела способ меня от этой проблемы. Любая помощь должна быть заметной, спасибо заранее.

+0

Sync API, похоже, не позволяет загружать видео для меня. Он говорит, что тип файла не разрешен. как вы его работали с Sync api? – Siriss

ответ

1

Проблема в том, что вы создаете экземпляр NSData, содержащий весь файл. Если файл слишком большой, чтобы вписаться в память, приложение будет разбиваться. Есть способы записи больших файлов на DBFile.

Поскольку у вас есть путь к локальному файлу, который мог бы сделать:

DBPath *paths=[[DBPath root] childPath:[self.allVideoArray objectAtIndex:Selectedvideo]]; 
DBFile *createfile=[filesystem createFile:paths error:nil]; 
[createFile writeContentsOfFile:self.path shouldSteal:NO error:nil]; 

Другим вариантом было бы прочитать файл в self.path в более мелкие куски и использовать DBFile appendData:error:.

Боковое примечание - вам действительно нужно проверить возвращаемые значения, чтобы убедиться, что эти вызовы работают или нет, и использовать параметр для регистрации причины проблемы (если есть).

+1

@ rmaddy Спасибо за ваш ответ, используя ваш код, который позволяет избежать краха, но небольшой видеофайл загружен успешно. Но в случае тяжелого видео он отображается в раскрывающемся списке, но также показывает 0 байтов. –

+0

Вы проверяете возвращаемое значение 'writeContentsOfFile: shouldSteal: error:'? Если он возвращает «НЕТ», проверьте ошибку. – rmaddy

+0

@ rmaddy Я проверяю, что он возвращает ДА, но я увидел в консоли отладчика его напечатал [ПРЕДУПРЕЖДЕНИЕ] ERR: DROPBOX_ERROR_NOTFOUND: sync.hpp: 282: p (/c7.mov) не существует –

Смежные вопросы