如何在设备离线时在iPhone上本地保存XML文件?

use*_*435 2 xml iphone parsing save plist

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

有一个简单的方法吗?或者我将不得不创建一个算法,在解析xml数据时创建一个plist?这似乎相当乏味......我想知道是否有更简单的方法来保存整个数据.

提前致谢!

Dav*_*har 9

我不知道您的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];
Run Code Online (Sandbox Code Playgroud)

您还可以轻松地将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
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案,但是如果要将XML解析为NSArray或NSDictionary,最好只保存数组或字典,以便每次要读取它时都不必解析缓存中的数据.NSArray和NSDictionary都有方法writeToFile和initWithContentsOfFile (2认同)