First launch :
1. Get server data.
2. Save server data in sqlite database.
3. Show sqlite data.Next launches :
1. Show sqlite data.
2. Get server data in background.
3. Delete prevIoUs sqlite data.
4. Save new server data in sqlite database.
5. Show sqlite data.
我对这些步骤有几个问题:
这是正确的做法吗?其他方式可能是每次从服务器显示数据,但不会立即在屏幕上显示数据(取决于互联网速度).
我还想过将sqlite数据与新的服务器数据进行比较.但面临着巨大的挑战.新服务器数据可能具有新记录或已删除记录.此外,我找不到合适的方法来比较每个数据库字段与JSON数据.
那么将本地sqlite数据与新服务器数据进行比较的最佳方法是什么?
3.每次我删除sqlite数据并插入新数据然后刷新屏幕(有一个UITableView)时,它会闪烁一秒钟,这很明显.如果遵循步骤3,4,5,如何避免此问题?
4.如果我每次或当应用程序变为活动状态时返回屏幕,我应该如何进行数据更新?我非常了解NSOperationQueues或使用GCD.但如果我疯了又一次又一次地来回屏幕怎么办?队列中将有许多NSOperations.
解决方法
您可能需要在服务器和本地对象上创建和修改日期,以进行比较 – 这将允许您决定要添加,更新和删除的对象.
如果服务器仅向您发送最近更新的对象,则可以节省大量流量并提高性能(但删除的对象将更难检测).
如果仅在服务器中更改数据则更容易,当应用程序也可以更改数据时,它变得更加复杂(但似乎不是你的情况).当然,这还取决于数据库的复杂程度.
如果你不想花一些时间来做这件事,那么每次获取所有数据也是有效的,即使它不理想!您可以在输入时让用户等待2-3秒,而不是显示旧数据并使其闪烁,同时获取新数据.或者你只能在启动应用程序时获取数据,所以当你到达那个视图控制器时它就已经准备好了.
这是一个每个人都会在某个时刻面临的复杂问题,所以我很想知道其他人会建议什么:)