如何在iPhone应用程序中更新数据

时间:2010-08-27 06:28:55

标签: ios iphone xcode updating

我创建了一个app,数据存储在plist中。现在有什么方法可以更新数据?也许如果我创建一个网页并从中检索我的数据而不是存储在plist中?或者有什么方法可以在我插入iTunes时更新数据?还是其他任何建议?我想要实现的是一种用户下载应用程序后更新数据的方法。

2 个答案:

答案 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),检查缓存版本文件是否包含较低版本数字,如果是这样得到大文件。它总是取决于内容刷新的频率。

查看完整文档:NSDictionaryNSStringNSFileManagerNSDate

答案 1 :(得分:1)

Plists不易修改,因为你必须将它们读回内存,进行更改并将它们写回文件。

编写plist时,请查看NSDictionary或NSArray的writeToFile:atomically:方法。记住你的plist基本上是一个由NSArrays,NSDictionaries,NSStrings和NSData组成的XML,你总是想写出根节点。

或者查找存储数据的其他方法:用户默认值或sqlite数据库。将数据“存储在云中”仅在某些情况下才有意义,例如,如果您想在不同设备之间共享数据或想要远程更新数据。如果可能的话,最好避免使用它。