2010-08-27 85 views
2

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

回答

1

由于必须将它们读回到内存中,进行更改并将它们写回到文件中,所以修整器不易修改。

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

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

+0

最好是把它做好,而不是避开它。例如。在有连接和更新时更新数据,并在本地缓存数据。使用'NSMutableDictionary'将数据版本或更新日期存储在plist中。 – Thomas 2010-08-27 07:05:19

+0

嗨,我会远程更新它。也许像这样,我可以发送警报告诉用户更新是否有效等。或者像YouTube应用程序一样,它如何存储/检索所有数据? – Stefan 2010-08-27 07:07:37

+0

嗨托马斯我怎么能实现你建议的方法? – Stefan 2010-08-27 07:09:13

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]; 
} 

这将尝试从http://server.com/获得的my.plist副本,成功将其写入磁盘并点localDictionary它,出错它会尝试从磁盘中读取(例如,先前下载时,有一个连接),如果磁盘上没有文件,它将创建一个空的NSMutableDictionary。无论哪种方式,localDictionary最后都会指向NSMutableDictionary

这非常简单,每次运行代码时都会请求文件。你可以例如使用NSFileModificationDate(由NSFileManger attributesOfItemAtPath:error:获得)和NSDate来确定是否需要更新。或者对于大文件,版本控制也是有意义的,有一个包含较大文件版本的小文件 - 从服务器获取小文件(例如使用NSString),检查缓存版本文件是否包含较低版本号得到大文件。它总是取决于内容刷新的频率。

查看完整的文档:NSDictionaryNSStringNSFileManagerNSDate

+0

嗨,my.plist是网页文件还是?对不起,我还是这个新手。服务器是免费使用的服务吗?感谢您的帮助 – Stefan 2010-09-02 06:03:03

+0

my.plist只是一个plist文件(请参阅http://en.wikipedia.org/wiki/Property_list),对于少量数据的使用非常方便,因为您可以序列化并将其写入文件只有一个命令,并在一个命令中反转该过程。服务器是你必须得到你自己的东西,通常你也需要一个域(也许2个子域可以路由到不同的服务器,以防万一掉下来)。您可以使用FTP服务器来代替Web服务器(http)。如果你需要帮助,你应该问别的地方,因为托管不是编程。 – Thomas 2010-09-02 06:37:43

相关问题