我创建了一个应用程序,数据存储在 plist 中。现在我可以通过哪些方式更新数据?也许如果我创建一个网页并从中检索我的数据而不是存储在 plist 中?或者有什么方法可以在我插入 iTunes 时更新我的数据?或者有什么其他建议?我想要实现的是一种在用户下载应用程序后更新我的数据的方法。
2 回答
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dir = [path objectAtIndex:0];
NSString *filePath = [dir stringByAppendingPathComponent:@"my.plist"];
NSMutableDictionary *localDictionary;
NSUrl *remoteUrl = [NSURL URLWithString:@"http://server.com/my.plist"];
NSMutableDictionary *remoteDictionary = [NSMutableDictionary dictionaryWithContentsOfURL:remoteUrl];
if(remoteDictionary != nil) {
[remoteDictionary writeToFile:filePath atomically:YES];
localDictionary = remoteDictionary;
}
else {
localDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
if(localDictionary == nil) localDictionary = [NSMutableDictionary dictionary];
}
这将尝试获取my.plist
from的副本http://server.com/
,成功时会将其写入磁盘并指向localDictionary
它,错误时它将尝试从磁盘读取(例如,在有连接时较早下载),如果没有文件磁盘它将创建一个空的NSMutableDictionary
. 无论哪种方式localDictionary
最终都会指向a NSMutableDictionary
。
这非常简单,每次运行代码时都会请求该文件。例如,您可以使用NSFileModificationDate
(通过 获得NSFileManger attributesOfItemAtPath:error:
)并NSDate
确定是否需要更新。或者对于大文件版本控制也是有意义的,拥有一个包含较大文件版本的小文件 - 从服务器获取小文件(例如使用NSString
),检查缓存的版本文件是否包含较低的版本号,如果是这样,请获取大文件。它始终取决于刷新内容的频率。
查看完整文档:NSDictionary、NSString、NSFileManager、NSDate
Plists 不容易修改,因为您必须将它们读回内存,进行更改并将它们写回文件。
要编写 plist,请查看 NSDictionary 或 NSArray 的writeToFile:atomically:
方法。请记住,您的 plist 基本上是由 NSArrays、NSDictionaries、NSStrings 和 NSData 组成的 XML,并且您总是想写出根节点。
或者寻找其他存储数据的方法:用户默认值或 sqlite 数据库。仅在某些情况下,将数据“存储在云端”才有意义,例如您想在不同设备之间共享数据或远程更新数据。如果可能的话,最好避免它。