将文件下载到目标c

时间:2017-05-12 05:45:07

标签: ios objective-c

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

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

  return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];

1 个答案:

答案 0 :(得分:0)

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

对于重新安装(即首先删除应用程序,然后从AppStore重新下载并运行它),显然没有这样的方法,除非你考虑ravi.p在他的评论中建议的内容(将其添加到PhotosAlbum)。这将击败重新安装的整个目的。如果用户删除了他们想要删除其所有数据的应用。这就是为什么警告对话框明确地说明了这一点。如果你能绕过这个会打败意图,不是吗? 在这种情况下,以前的Documents目录不会更改,它是已删除,并且在重新安装时会创建一个新目录。

我最近没有检查它,但我相信甚至文档目录的完整路径在更新后也不会改变,包括由沙盒机制创建的散列部分。我的猜测是,您要么在更新过程中遇到困惑,要么只是在较新的应用程序版本中获取不同的文件名。

修改 好的,显然应用程序的文件夹可以更改更新,至少根据您在评论中进一步解释的内容。 :) 然后我想知道如何再次找到你的sqlite文件,但是以一种方式可以很容易地解决你的问题: 不要在数据库中保存完整路径。不管怎样,这是不好的做法,因为你已经习惯于首先获得它的方法(在下载文件之后)用于访问文件夹。所以你只保存

[response suggestedFilename]

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

在您需要访问该文件的位置,您只需重新构建路径,就像在发布的第一行代码中一样。 您甚至可以在某个地方(模型类或负责DB访问的类)为此编写一个方便的方法。

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