【问题标题】:How can I update data in iPhone app如何在 iPhone 应用程序中更新数据
【发布时间】:2011-04-04 15:43:53
【问题描述】:

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

【问题讨论】:

    标签: ios iphone xcode updating


    【解决方案1】:
    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

    【讨论】:

    • 嗨,my.plist 是网页文件还是?对不起,我还是新手。服务器是免费使用的服务吗?感谢您的帮助
    • my.plist 只是一个 plist 文件(请参阅en.wikipedia.org/wiki/Property_list),它非常方便用于少量数据,因为您只需一个命令即可将其序列化并写入文件并反转过程在一个命令中也是如此。服务器是您必须自己拥有的东西,通常您还需要一个域(也许2个子域可以路由到不同的服务器以防万一)。除了 Web 服务器 (http),您还可以使用 FTP 服务器。如果您需要这方面的帮助,您应该询问其他地方,因为托管不是编程。
    【解决方案2】:

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

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

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

    【讨论】:

    • 最好做好,不回避。例如。当有连接和更新时更新数据,而不是在本地缓存它。使用NSMutableDictionary 将数据版本或更新日期存储在 plist 中。
    • 您好,我想远程更新它。也许像,我可以发送一个警报,告诉用户有更新可用等。或者像 YouTube 应用程序,它如何存储/检索所有数据?
    • 嗨,Thomas,我怎样才能实现你建议的方法?
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2011-10-31
    • 2011-10-05
    • 1970-01-01
    • 2012-03-19
    • 2011-12-13
    • 1970-01-01
    • 2011-02-01
    相关资源
    最近更新 更多