我创建了一个app,数据存储在plist中。现在有什么方法可以更新数据?也许如果我创建一个网页并从中检索我的数据而不是存储在plist中?或者有什么方法可以在我插入iTunes时更新数据?还是其他任何建议?我想要实现的是一种用户下载应用程序后更新数据的方法。
答案 0 :(得分: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
获取http://server.com/
的副本,一旦成功,它会将其写入磁盘并将localDictionary
指向它,如果出错,它将尝试从磁盘(例如,在连接时先前下载),如果磁盘上没有文件,则会创建一个空的NSMutableDictionary
。无论哪种方式,localDictionary
最终都会指向NSMutableDictionary
。
这非常简单,每次运行代码时都会请求文件。你可以,例如使用NSFileModificationDate
(由NSFileManger attributesOfItemAtPath:error:
获得)和NSDate
来确定是否需要更新。或者对于大文件版本控制也是有意义的,有一个包含较大文件版本的小文件 - 从服务器获取小文件(例如使用NSString
),检查缓存版本文件是否包含较低版本数字,如果是这样得到大文件。它总是取决于内容刷新的频率。
查看完整文档:NSDictionary,NSString,NSFileManager,NSDate
答案 1 :(得分:1)
Plists不易修改,因为你必须将它们读回内存,进行更改并将它们写回文件。
编写plist时,请查看NSDictionary或NSArray的writeToFile:atomically:
方法。记住你的plist基本上是一个由NSArrays,NSDictionaries,NSStrings和NSData组成的XML,你总是想写出根节点。
或者查找存储数据的其他方法:用户默认值或sqlite数据库。将数据“存储在云中”仅在某些情况下才有意义,例如,如果您想在不同设备之间共享数据或想要远程更新数据。如果可能的话,最好避免使用它。