[swift]解析-只下载更新数据的行

标签: ios Swift
发布时间: 2017/3/6 23:22:10
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在 AWS 上运行分析服务器。数据被存储在 mlab 上。在应用程序启动,我想查询︰

   let query = PFQuery(className: foodDataClassName_)
   query.findObjectsInBackgroundWithBlock({(objects : [PFObject]?,error : NSError?) -> Void in

            })

它返回我的数据的所有行。我将它们使用 CoreData 在本地保存。任何一行的数据更新时,删除以前的本地存储的数据再次下载所有数据和保存它。这不是一种好方法。我想要的是我只下载行的更新并不是所有的行。如何能够做到?谢谢你。

解决方法 1:

你可以做的就是以下内容︰

第一次用户登录到您的应用程序,您需要查询从服务器的所有用户行,所以在这种情况下你将执行都查询,没有任何条件。在此查询中可以使用限制,以限制将由服务器返回的结果。当您从服务器获取结果你将需要︰

  • 在您的本地数据库中存储的所有行
  • 存储当前内 NSUserDefaults NSDate

下一次对您的服务器将只能得到的已更新的行。为了实现这一目标你将需要︰

  • 上次同步日期得到您的 NSUserDefaults (我们保存上面的一个)
  • 执行的查询,但是这次是大于一个条件你 lastSyncDate

在结束时代码获取项目看起来应类似于以下内容︰

    // check if we synced the date before
    let lastSyncDate = NSUserDefaults.standardUserDefaults().objectForKey("lastSyncDate")
    let query = PFQuery(className: "MyParseObjectClassName")

    if (lastSyncDate != nil){
        // get only records that were created/updated since the last sync date
         query.whereKey("updatedAt", greaterThan: lastSyncDate!)
    }

    query.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]?, error: NSError?) -> Void in

        // store objects in parse local data store
        if (objects?.count > 0){
            PFObject.pinAllInBackground(objects)
        }

        // save the last sync date in user defaults
        NSUserDefaults.standardUserDefaults().setValue(NSDate(), forKey: "lastSyncDate")
        NSUserDefaults.standardUserDefaults().synchronize()

    }

请注意在这里我使用解析本地数据存储,使您能够解析将对象存储到你的本地数据基地很容易而无需使用core data。所以我强烈推荐你去利用它,解析本地数据存储区是为您提供由解析 iOS SDK 和节省大量的时间和精力。 本地数据存储区还替你照顾到了创建更新的对象,它将自动创建新的对象,并将更新现有的。

你可以阅读更多关于它在这里

官方微信
官方QQ群
31647020