目标c,下载,检查并保持plist文件的可用性

时间:2011-07-07 15:45:55

标签: iphone objective-c plist asihttprequest

好吧,我今天/本周有一点精神障碍,所以我可能是傻瓜,但是我无法让它发挥作用。因此,任何建议/帮助将一如既往地受到高度赞赏......

我需要我的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业务。

2 个答案:

答案 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];
}