如何使存储在文档目录中的 plist 在 iPhone 和 iPad 之间为通用应用程序同步?

Posted

技术标签:

【中文标题】如何使存储在文档目录中的 plist 在 iPhone 和 iPad 之间为通用应用程序同步?【英文标题】:How to keep plist stored in documents directory in sync between iPhone & iPad for universal app? 【发布时间】:2012-05-27 11:01:57 【问题描述】:

我有一个设置,其中我有一个 plist 文件,我需要在设备之间保持同步以用于通用应用程序。目前plist文件存放在documents目录下。

我一直在网上寻找使文件保持同步的方法,许多解决方案似乎都基于Core Data。我不确定这是否可能,但有没有办法我可以在不使用Core data 的情况下同步这个文件?如果是这样,请有人建议如何解决这个问题或向我指出一些可以提供帮助的材料的方向?

更具体地说,我需要一种方法来确保正在使用的设备具有 plist 文件的最新副本。例如,如果我早餐时在 iPad 上编辑它,那么在午餐时间我在 iPhone 上加载应用程序时,我应该会通过我的 iPad 看到早餐时间所做的编辑。

【问题讨论】:

同步究竟是什么意思..?就像一个用户在他的 iphone 和 ipad 上安装了这个应用程序..? 我已经更详细地更新了我的问题。很抱歉有任何混淆。 【参考方案1】:

如果您在设置中打开了 iCloud 备份,iCloud 会自动备份您设备上所有应用程序(或选择性)的所有文档目录。

但上述事情我猜一天会发生一次。为了让它实时工作,你必须使用 iCloud API。

希望这会有所帮助。

【讨论】:

【参考方案2】:

AFAIK 您需要为 iPhone/iPad 应用程序提供服务器 API 以发出 POST 请求。您可以发布整个文件或使用包含来自 plist 文件的实际数据的正文 (JSON/XML) 创建 POST 请求。您必须在服务器上维护 ETag/版本信息。为了使同步工作,您需要在服务器上唯一标识每个用户并存储他的 plist 信息。

在 iPhone/iPad 应用程序中,在每次应用程序启动期间,通过发出 HTTP 请求检查资源 ETag(以防文件已上传)或版本(以防 plist 文件内容以 XML/JSON 形式发布)。您还可以在应用程序中开发调度程序功能以获得更好的精度。如果有更新,请下载并保存新的信息/plist 文件。在应用程序 NSUserDefaults 中保留 ETag/version 条目并在此过程中更新它。

友情提示:避免将任何可下载的数据/设置存储在 Application_Home/Documents 目录中,因为应用可能会被拒绝。请阅读此post 以及 Apple 开发者门户上的相关文档。

这只是初步的想法,即兴创作和优化是为了让你弄清楚...... :)我希望这会有所帮助!

干杯!!阿马尔。

【讨论】:

以上是关于如何使存储在文档目录中的 plist 在 iPhone 和 iPad 之间为通用应用程序同步?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS8 中如何设置私有文档目录作为存储提供程序应用程序扩展正在使默认文档目录共享?

如何将自定义数组保存/重新加载到 plist

写入文档目录中的 plist 时出错

如何检查 plist 文件中的更新值

如何将图像从 plist 加载到 UITableView?

如何清除在 Xcode 中创建的 plist 中的数据?