【问题标题】:How can I locally save an XML file on an iPhone for when the device is offline?当设备离线时,如何在 iPhone 上本地保存 XML 文件?
【发布时间】:2011-01-18 04:13:33
【问题描述】:

我的应用正在访问远程 XML 文件中的数据。我在接收和解析数据方面没有问题。但是,我想获取最新的 XML 数据并将其存储在本地,以便在用户的 Internet 服务不可用的情况下使用之前加载的本地数据。

有没有简单的方法来做到这一点?还是我必须创建一个算法,在解析 xml 数据时创建一个 plist?这似乎相当乏味......我想知道是否有更简单的方法来保存整个数据。

提前致谢!

【问题讨论】:

    标签: iphone xml parsing save plist


    【解决方案1】:

    我不知道您收到的 XML 数据是什么格式,但在这里使用 NSData 可能会有所帮助,因为它具有非常易于使用的方法来从 URL 或路径名读取/写入数据.

    例如:

    NSURL *url = [NSURL URLWithString:@"http://www.fubar.com/sample.xml"];
    NSData *data = [NSData dataWithContentsOfURL:url];  // Load XML data from web
    
    // construct path within our documents directory
    NSString *applicationDocumentsDir = 
       [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *storePath = [applicationDocumentsDir stringByAppendingPathComponent:@"sample.xml"];
    
    // write to file atomically (using temp file)
    [data writeToFile:storePath atomically:TRUE];
    

    您还可以轻松地将 NSData 对象与内存中的原始缓冲区(指针/长度)相互转换,因此如果您的数据已经下载,您可以这样做:

        NSData *data = [NSData dataWithBytes:ptr length:len];   // Load XML data from memory
        //  ... continue as above, to write the NSData object to file in Documents dir
    

    【讨论】:

    • 这绝对是我所希望的简单解决方案。非常感谢!
    • 这是一个很好的解决方案,但是如果您将 XML 解析为 NSArray 或 NSDictionary,最好只保存数组或字典,这样您就不必解析每次你想读它时缓存。 NSArray 和 NSDictionary 都有 writeToFile 和 initWithContentsOfFile 方法
    • 如何从本地保存的数据中解析 this(xml)?任何示例代码/建议?谢谢。请帮帮我。
    • 请注意,不鼓励使用 dataWithContentOfURL,因为数据是从主 (GUI) 线程同步获取的。应该改用NSURLConnectionMKNetworkKit
    猜你喜欢
    • 2017-06-11
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多