使用Parse替换Core Data

我刚刚发现了Parse的本地数据存储 ,它看起来像一个处理在线/离线同步的SQL数据库。

我正在为想要与联系人应用程序类似的客户编写应用程序。 可以离线添加/编辑联系人,也可以在其他设备上添加联系人,这些联系人都需要正确同步,而不是创建重复的实体。

使用Parse Local Data Store是一个可行的选择吗?

我在App Delegate中执行此操作,并使用options方法完成启动:

query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in if error == nil { if let objects = objects as? [PFObject] { PFObject.pinAllInBackground(objects, block: nil) } } else { println("Error: \(error!) \(error!.userInfo!)") } } 

然后在我的初始视图控制器中我这样做:

 query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in if error == nil { if let objects = objects as? [PFObject] { self.athleteArray = objects self.tableView.reloadData() } } else { println("Error: \(error!) \(error!.userInfo!)") } } 

但是,我假设因为App Delegate查询在后台运行,数据存储在视图控制器运行时没有收到对象,因为tableview显示为空。

当我稍后再次启动应用程序时,对象就在那里,因为已经填充了数据存储。

如何使用Parse的本地数据存储管理同步对象(实时,没有第二个应用程序启动)? 我做错了什么吗?

解析和核心数据解决了不同的问题。 Parse是一个云数据存储,包含许多有用的辅助服务。 核心数据是Objective-C对象图持久性系统。 首先要问自己的是:

1)每个Parse查询都可能花费开发人员的钱和用户带宽和延迟。 这些成本是否值得付出代价?

2)根据我的经验,Parse的本地数据存储不如我想的那么可靠。 它可能足以满足您的需求。 只有你可以告诉? 我选择在我最近的应用程序中同时使用Core Data和Parse。

3)同步数据很难。 通过成为“云中的真相”来解析可能会使这更容易。 但不是通过本地数据存储。 每个同步应用程序都需要扫描一小部分本地数据库,并将其与云进行比较。 有一些方法可以缓解这种情况,但需要与“真相”进行比较,并处理合并冲突。

4)Parse的本地数据存储不是共享资源,因为您似乎相信。 本地数据存储区位于每个应用程序的沙箱中并且是隔离的。 Parse正在做一些事情以允许Watch扩展的共享,并且可能会与watchOS v2一起打开。 但是在Parse发货之前我不会指望它。

最后一点非常重要。 Parse的核心是一家网络技术公司。 他们相信快速的技术转向。 如果他们现在不能很好地工作,他们很快就会。 作为开发人员,这意味着在迭代发布技术几次之前,您不应该跳过他们的新技术。

我发现Parse成功的道路在于,当你开始你的项目时,使用它们可以做得很好。 目前还不清楚他们是否会以达到目标所需的速度发展,他们没有动力为新应用降低费率。