【发布时间】:2013-04-27 15:29:18
【问题描述】:
我创建了一个简单的 iOS 测试应用程序,它在本地创建一个文件并将其上传到关联的保管箱共享。我的目标是根据某些事件(按钮按下)不断更新这个文件(覆盖它)。文件的内容就是事件发生时的当前日期和时间。
当我第一次运行应用程序时,每次都可以上传 - 如果文件在被覆盖(更新)之前就存在,请使用以下命令:
NSString * destination = @"/";
NSString * rev = [_fileDetailsDict objectForKey:[destination stringByAppendingString:fileName] ];
[[self restClient] uploadFile:fileName toPath:destination withParentRev:rev fromPath:fullPath];
其中 _fileDetailsDict 保存父版本,需要覆盖文件而不是创建副本。
问题在于,如果应用程序再次尝试更新文件(基于我按下按钮),我总是会从 Dropbox 收到“副本冲突”错误响应。相反,如果我重新启动我的应用程序,更新就会再次发生。起初我认为这是一个时间问题,但即使我等待几分钟按下按钮,这个问题仍然存在。
“感觉”好像我没有以某种方式关闭上传到保管箱。我错过了什么?
【问题讨论】:
-
第一次上传文件会产生一个新的版本。为了能够进行第二次上传,您需要指定这个新的父版本。
-
是的,我想到了。所以在调用uploadFile之后:我坚持调用:[[self restClient] loadMetadata:@“/”];我在 loadMetadata: 委托方法中捕获了结果,更新了 rev 属性。没区别。 uploadFile: 和 loadMetadata: 之间是否应该有一些等待时间?
-
哦,想通了——我没有完全意识到这些都是异步方法。与其在 uploadFile: 方法之后立即更新 rev,我应该在 uploadFile: 委托方法中捕获新的 rev,该方法在所有操作完成时被触发。谢谢你让我直截了当。
标签: ios dropbox-api