好吧,我今天/本周有一点精神障碍,所以我可能是傻瓜,但是我无法让它发挥作用。因此,任何建议/帮助将一如既往地受到高度赞赏......
我需要我的iPhone应用程序,根据要求从服务器上下载一个plist文件,并在应用程序加载时让它可用(IE只需要实际下载一次)。但我真的不认为我做得对...我正在使用ASIHTTPRequest获取文件,这是在一个单独的线程中运行,以允许进度条更新。下载在首次运行或请求时启动(此时)。
我没有收到任何错误并且正在联系服务器,但是我不知道文件是否保存到哪里。我的测试似乎表明文件没有被下载。
所以我想我的问题是:
以下一些代码:
-(void)getPlist
{
NSArray *docpaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [docpaths objectAtIndex:0];
NSURL *url = [NSURL URLWithString:plistURL];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:documentsDirectory];
[request setDownloadProgressDelegate:progbar];
[request startSynchronous];
}
如果这是非常愚蠢的话,请提前/道歉,仍然非常关注这个Objective-C业务。
答案 0 :(得分:3)
如果您正在使用ASIHTTPRequest,请使用它的buildin缓存系统。不要推出自己的。这很简单,易于管理
ASIHTTPRequest可以自动存储 将数据下载到缓存中以供使用 后来。这对许多人来说都很有帮助 情况:
您想要访问数据 什么时候没有互联网连接 你不能再下载它了 想要下载的东西只有它 自上次下载以来已发生变化 它正在使用的内容 永远不会改变,所以你只想 下载一次
http://allseeing-i.com/ASIHTTPRequest/How-to-use#using_a_download_cache
回答您的原始问题
我应该在哪里保存文件?是否有任何规则或是否会在应用程序中保留在手机上?
只需将其保存到应用程序的文档目录即可。它的沙箱。
下载后,只要该应用程序运行,该文件是否可用?
是。但是,如果用户删除了您的应用并重新安装它,则所有缓存的文件都将被删除。处理这种情况。
有更好的方法吗?
我认为您当前的实施没有任何问题。如果遇到问题,请检查请求对象是否有错误和/或检查返回HTTP StatusCode int statusCode = [request responseStatusCode];
获取您的文档路径(设备内部):
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
答案 1 :(得分:1)
我认为下载目标路径必须是文件的路径,而不仅仅是保存文件的目录。试试这个:
-(void)getPlist
{
NSArray *docpaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [docpaths objectAtIndex:0];
// path to the new destination file
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"foo.bar"];
NSURL *url = [NSURL URLWithString:plistURL];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:path]; // use the file path
[request setDownloadProgressDelegate:progbar];
[request startSynchronous];
}