【问题标题】:How to avoid "conflicted copy" when uploading to dropbox from iOS client从 iOS 客户端上传到 Dropbox 时如何避免“冲突副本”
【发布时间】: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


【解决方案1】:

尝试将 nil 传递给 withParentRev 参数。我猜你知道 files .rev 参数的用法,我尝试将 nil 传递给参数,它每次都会创建一个新文件(不是副本)。

也许这对你有很大帮助。当我遇到类似问题时,我提到了这个。

【讨论】:

  • 我不想要副本,我需要更新(覆盖)原始文件。传递 nil 会给我: my file.txt 我的文件 (1).txt 我的文件 (2).txt 等等……我只是想让“我的 file.txt”不断更新。
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 2011-07-02
  • 2018-02-03
  • 1970-01-01
相关资源
最近更新 更多