【问题标题】:Updating Plist file via download iOS通过下载 iOS 更新 Plist 文件
【发布时间】:2014-12-05 19:04:51
【问题描述】:

我在 Apple 应用商店有一个测验应用。问题存储在 Plist 文件中。我想做的是找到一种通过下载新版本来更新 Plist 文件的方法,而不必每次我有新问题要添加时都提交更新

有人知道可以帮助我的体面教程吗?

非常感谢。

【问题讨论】:

标签: ios xcode


【解决方案1】:

我不确定教程,但实现您所描述的步骤非常简单:

  1. 为您的远程数据创建一个 url 请求
  2. 解析返回的数据
  3. 将解析后的数据写入新的本地 plist

例如:

// Create a NSURL to your data
NSString *dataPath = @"www.mydata.com/path";
NSURL *dataURL = [NSURL URLWithString:dataPath];

// Create an asycnhronous request along with a block to be executed when complete
[NSURLConnection sendAsynchronousRequest:[[NSURLRequest alloc] initWithURL:dataURL]
                                   queue:[[NSOperationQueue alloc] init]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
 {
     if (error) {
         NSLog(@"%@", error.localizedDescription);
         // Handle the request error
     }
     else {
         // We have some data, now we need to serialize it so that it's usable
         NSError *serializationError;
         NSDictionary *serializedDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&serializationError];
         if (serializationError) {
             NSLog(@"%@", serializationError.localizedDescription);
             // Handle the serialization error
         }
         else {
             // We have a serialized NSDictionary, now we just want to write it
             // First we create the path to write it to, eg. uers documents directory
             NSURL *documentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
             // Then write it
             BOOL success = [serializedDictionary writeToFile:documentsDirectory.path atomically:YES];
             if (!success) {
                 NSLog(@"Error writing file");
             }
         }
     }
 }];

注意:您可能需要考虑将数据存储在远程数据库中,例如 Parse。通过这种方式,您可以查询新问题并仅下载这些问题,这样您就不会使用不必要的带宽。您可能还想考虑使用Core Data 来维护您的本地数据,而不是将其写入plist。主要优点是您不必将整个 plist 序列化到内存中即可使用它 - 您只需查询所需的特定问题。

希望这会有所帮助。

【讨论】:

  • 我已经使用 Parse 进行推送通知,但不知道它也可以做到这一点。离开 Plist 的唯一问题是已经存在并迁移它的 3000 个问题。
  • 数据驱动应用程序的一个常见做法是使用 plist 作为起点并将其输入Core Data。然后,您可以合并定期服务器查询以查看是否有任何新内容,如果有,请使用新的远程数据更新 Core Data
  • 所以一个示例流程可能是: - 在启动时检查 Core Data 是否已填充(例如,运行没有谓词的查询) - 如果它返回 0 个对象,那么这是第一次启动,所以序列化你的 plist,然后遍历每个问题,为每个问题插入一个新的 NSManagedObject - 否则,你已经完成了 - Core Data 很好去 - 查询解析所有在你上次更新后更新的问题(通过存储在NSUserDefaults 中的NSDate 跟踪此情况) - 如果有任何结果,则为它们创建新的NSManagedObjects 或更新当前的
猜你喜欢
  • 2016-04-10
  • 2012-08-25
  • 1970-01-01
  • 2014-05-11
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多