2013-04-27 3 views
4

Я создал простое тестовое приложение для iOS, которое создает файл локально и загружает его в соответствующий общий ресурс Dropbox. Моя цель - обновить этот файл (переписать его) на основе определенных событий (нажмите кнопку). Содержимое файла - это просто текущая дата & время во время события.Как избежать «конфликтной копии» при загрузке в Dropbox с клиента iOS

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

NSString * destination = @"/"; 
NSString * rev = [_fileDetailsDict objectForKey:[destination stringByAppendingString:fileName] ]; 
[[self restClient] uploadFile:fileName toPath:destination withParentRev:rev fromPath:fullPath]; 

Причем _fileDetailsDict имеет родительские обороты, необходимые для перезаписи файла и не создавать копию.

Проблема в том, что если приложение пытается обновить файл во второй раз (на основании нажатия кнопки), я всегда получаю ответ «ошибка конфликта» из dropbox. Если вместо этого я перезапущу приложение, обновление снова станет прекрасным. Сначала я думал, что это проблема с синхронизацией, но даже если я подожду несколько минут, чтобы нажать кнопку, эта проблема сохраняется.

Он «чувствует», как будто я как-то не закрыл загрузку в Dropbox. Что мне не хватает?

+2

Загрузка файла в первый раз приводит к новому rev. Чтобы иметь возможность выполнять вторую загрузку, вам нужно указать этот новый родительский rev. – rmaddy

+0

Да, я подумал об этом. Так сразу после вызова uploadFile: я застрял в вызове: [[self restClient] loadMetadata: @ "/"]; , в котором я беру результаты в методе loadMetadata: delegate, обновляя свойство rev. Не было никакой разницы. Должно ли быть некоторое время ожидания между uploadFile: и loadMetadata:? – Yohst

+1

О, разобрался - я не совсем понял, что все эти асинхронные методы. Вместо обновления rev сразу после метода uploadFile: я должен был захватить новый rev в методе uploadedFile: delegate, который запускается, когда все действие будет завершено. Спасибо, что поставил меня прямо на rmaddy. – Yohst

ответ

0

Попробуйте пропустить ноль к параметру withParentRev. Я думаю, вы знаете, что используете параметр .rev., Я пробовал передавать nil в параметр и каждый раз создавал новый файл (а не копию).

Возможно, это было бы очень полезно для вас. Я назвал это, когда у меня была аналогичная проблема.

+0

Мне не нужна копия, мне нужно обновить (переписать) исходный файл. Передача nil дала бы мне: my file.txt мой файл (1) .txt мой файл (2) .txt и т. Д. Я просто хочу, чтобы «my file.txt» обновлялся непрерывно. – Yohst