【问题标题】:download file to update-independent directory in objective c将文件下载到目标 c 中与更新无关的目录
【发布时间】:2017-05-12 05:45:06
【问题描述】:

我正在开发一个下载一些视频并保存的IOS应用程序,但是更新应用程序或重新安装后应用程序更改了应用程序目录,并且应用程序无法访问以前下载的文件。 有没有办法将下载的文件保存到应用程序域目录之外的位置? 生成保存文件路径的代码是。

  NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];

  return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];

【问题讨论】:

  • 用户可以看到您下载并保存了哪些视频,如果是,则可以将其保存到 PhotosAlbum,如果您删除应用程序,则无法访问该应用程序以前的任何目录
  • 如果您的应用程序已被卸载,您将无法在本地执行此操作,但只有在您可以跟踪用户之前下载的内容可能在您的服务器中时才能做到这一点,因此每当用户安装应用程序时再次,您获取下载列表并在后台再次重新下载内容,但这需要一种机制来识别用户,如果您的应用程序中有身份验证系统,这对您来说很容易,否则您可以do this 保存KeyChain 中的 iD 并识别返回用户。
  • 感谢您的 cmets,请阅读我在第一个答案 cmets 中的评论。

标签: ios objective-c


【解决方案1】:

我无法验证您问题的更新部分。 我一直都在使用应用程序的文档,并且在未更改的更新之后,所以我仍然可以使用在以前版本中添加到其中的任何文件。

对于重新安装(即首先删除应用程序,然后从 AppStore 重新下载并运行它)显然没有这种方法,除非您考虑 ravi.p 在他的评论中建议的内容(将其添加到 PhotosAlbum)。这将超出重新安装的全部目的。如果用户删除了他们希望删除其所有数据的应用。这就是警告对话框特别说明这一点的原因。如果你能规避这一点,就会违背本意,不是吗? 在这种情况下,之前的 Documents 目录没有改变,它被删除,并在重新安装时创建了一个新目录。

我最近没有检查它,但我相信即使是 Documents 目录的完整路径在更新后也不会改变,包括由沙盒机制创建的散列部分。我的猜测是,您要么在更新过程中混淆了某些东西,要么只是在较新的应用版本中获得了不同的文件名。

编辑: 好的,显然应用程序的文件夹可以在更新时更改,至少根据您在评论中进一步解释的内容。 :) 然后我想知道如何再次找到您的 sqlite 文件,但无论如何,您的问题有一个简单的解决方案: 不要将完整路径保存在数据库中。无论如何,这都是不好的做法,因为您首先用来获取它的方法(在下载文件之后)是用来访问文件夹的。所以你只保存

[response suggestedFilename]

在您的数据库中(来自您发布的代码)。

在您需要访问该文件的地方,您只需以与您发布的第一行代码相同的方式重建您的路径。 您甚至可以在某个地方为此编写一个方便的方法(模型类或负责数据库访问的类)。

顺便说一句:更新和重新安装是两件不同的事情,尤其是 Xcode 将您的开发版本复制到您的开发设备上的过程与用户最终从商店更新您的应用程序的过程不同。

【讨论】:

  • 感谢您的回答,可能是我混淆了什么。但我知道更新或重新安装 ios 专用于应用程序更改的代码。我测试了它。但是为什么数据库没有改变。当我在 xcode 中开发时,我下载了一个视频,它从本地存储中读取并将路径保存在 sqlite db 中,在下一个构建并通过 xcode 运行时,sqlite 中的路径是持久的,但文件和整个目录都消失了。为什么 ?我能做些什么来解决这个问题?我不喜欢将视频数据保存到数据库。
猜你喜欢
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多