当在线数据库发生变化时,如何将iPhone本地数据库同步到在线数据库?

时间:2011-01-08 07:55:03

标签: iphone sql core-data soap synchronization

目前,只要需要数据,我的应用程序就会通过ASP.NET XML Web服务从Microsoft SQL 2005数据库中提取数据。

我想更改我的应用程序以使其具有本地数据库,并且此数据库将检查数据是否已更改并将其自身同步到任何新数据。

如何判断是否有新数据?

我只计算SQL表中的行数,是否小于CoreData数据库中的行数,然后重新编写CoreData数据库?

有没有办法告诉我只同步已更改或已添加/删除的记录?

我应该在应用启动时同步所有数据,还是只同步与加载视图对应的表?

非常感谢任何帮助!

谢谢, -Mike

2 个答案:

答案 0 :(得分:1)

如果你对模式设计很聪明,那么你可以。最好的选择可能是将“created_at”和“updated_at”日期字段添加到数据库表中(并在修改或创建记录时设置它们)。然后在同步请求查询中,选择日期大于本地数据库中最高日期的所有记录。这将适用于单向同步。双向同步更加困难,需要考虑联系解决方案。

至于同步,我建议尽可能在后台进行。在获取新记录时,您应该能够使用NSFetchedResultsController来处理更新视图。这样用户就不会遇到任何恼人的加载屏幕。

答案 1 :(得分:0)

您需要一种方法来检测自上次连接以来数据库中已更改的内容。 SQL Server为此提供了两个框架:Change TrackingChange Data Capture。有关两者的比较,请参阅Comparing Change Data Capture and Change Tracking。这些框架由.Net Sync Framework利用,以自动化数据同步。

不幸的是,这些都不在SQL Server 2005中。它们都是SQL Server 2008的功能,所以你必须升级。

使用SQL Server 2005,您只能手动跟踪更改。有几种方法,都是不完美的,它们都围绕触发器和跟踪表,或围绕使用TIMESTAMP跟踪行版本(问题始终是如何跟踪已删除的行)。

虽然Core-Data具有对同步的内置支持(请参阅Syncing Core Data Applications),但它不适用于您的方案。