我在AWS上运行解析服务器。数据存储在mlab上。在应用启动时,我提出了一个问题:
let query = PFQuery(className: foodDataClassName_)
query.findObjectsInBackgroundWithBlock({(objects : [PFObject]?,error : NSError?) -> Void in
})
它返回所有数据行。我使用CoreData在本地保存它们。当更新任何数据行时,我删除以前本地存储的数据并再次下载所有数据并保存。这不是一个好方法。我想要的是我只下载更新而不是所有行的行。我怎样才能做到这一点?感谢。
答案 0 :(得分:1)
您可以做的是以下内容:
用户首次登录您的应用时,您需要查询服务器中的所有用户行,因此在这种情况下,您将无任何条件地执行查询。在此查询中,您可以使用 limit 来限制服务器返回的结果。当您从服务器获得结果时,您需要:
对服务器的下一次调用将只获取更新的行。为了实现它,您需要:
最后,您获取项目的代码应如下所示:
// 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()
}
请注意这里我使用了解析本地数据存储,它允许您轻松地将解析对象存储到本地数据库,而无需使用核心数据。 Parse本地数据存储由解析iOS SDK提供,为您节省了大量的时间和精力,因此我强烈建议您利用它。 本地数据存储还会照顾您创建/更新的对象,它将自动创建新对象并更新现有对象。
您可以在here
中详细了解相关信息