gpt4 book ai didi

iPhone - 检查文件是否需要更新/更新

转载 作者:行者123 更新时间:2023-12-03 19:37:07 26 4
gpt4 key购买 nike

我正在尝试制作一个简单的应用程序来检查 iPhone 上的 .txt 文件是否需要更新。现在我正在检查上次修改的 html header ,我想将其与我的 iPhone 中的文件进行比较。如果网站的日期晚于 iPhone 上的文件,iPhone 会下载并替换该文件。

我正在使用 NSURL,但下载文件时遇到了相当困难。

提前致谢

最佳答案

ASIHTTPRequest是一个库,它将 HTTP 请求和一堆直观的检查(如代理身份验证、缓存等)封装在一个简洁的类中,该类是 NSURLRequest 的扩展。我建议使用这个,您可以从找到的可能选项中选择一个缓存策略 here 。看起来您想要 ASIAskServerIfModifiedCachePolicy,它总是询问服务器是否有更新的版本,并且仅在较新的情况下下载(它检查 Last-Modified: 以及其他标题)。您还可以将此缓存策略与 ASIFallbackToCacheIfLoadFailsCachePolicy 结合使用,这样,如果联系服务器失败,仍将使用最后存储的版本。

示例代码:

#import "ASIHTTPRequest.h"
#import "ASIDownloadCache.h"

/* doing the actual check. replace your existing code with this. */
ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:myTxtFileURL];
[request setDownloadCache:[ASIDownloadCache sharedCache]];
[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[request startSynchronous];
NSString *latestText = [request responseString];
[request release];

请注意,我只使用[request startSynchronous],因为它很容易粘贴到示例代码中。您应该使用:

  1. [request setDelegate:self] 然后在当前类中的某处实现 ASIHTTPRequestDelegate 协议(protocol)来处理 requestFinished:requestFailed :,或
  2. 一个 block ,您可以使用它来设置

    [request setCompletionBlock:^
    {
    /* code to run after the download finishes */
    }];
    [request setFailedBlock:^
    {
    /* code to run if the download failed */
    }];

其中任何一个都需要在[request startSynchronous]之前完成,然后您需要将startSynchronous更改为startAsynchronous。查看链接以获取有关“How to use it ”选项卡的更多文档。

编辑:您说您想要比较文件本身。我不明白你到底想要什么,但如果你想将旧文件中的内容与新文件中的内容进行比较,那么你需要首先获取旧文件文本的副本。为此:

ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:myTxtFileURL];
[request setDownloadCache:[ASIDownloadCache sharedCache]];
[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
NSStringEncoding encoding;
NSError *error = nil;
NSString *oldText =
[NSString stringWithContentsOfFile:[[ASIDownloadCache sharedCache] pathToCachedResponseDataForRequest:request]
usedEncoding:encoding
error:&error];
[request startSynchronous];
NSString *newText = [request responseString];
[request release];

/* now compare the NSString oldText to newText however you like. */

学习成为一名优秀程序员的一部分是能够使用和探索可用的文档和资源。我建议您阅读我链接到的文档,阅读 Apple 关于 iOS 的文档,或者通过 Google 搜索您的下一个问题。 Apple 文档中有关比较字符串的部分是 here .

关于iPhone - 检查文件是否需要更新/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5373305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com