解析 - 仅下载更新的数据行

时间:2016-07-31 10:10:56

标签: ios swift parse-platform

我在AWS上运行解析服务器。数据存储在mlab上。在应用启动时,我提出了一个问题:

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

            })

它返回所有数据行。我使用CoreData在本地保存它们。当更新任何数据行时,我删除以前本地存储的数据并再次下载所有数据并保存。这不是一个好方法。我想要的是我只下载更新而不是所有行的行。我怎样才能做到这一点?感谢。

1 个答案:

答案 0 :(得分:1)

您可以做的是以下内容:

用户首次登录您的应用时,您需要查询服务器中的所有用户行,因此在这种情况下,您将无任何条件地执行查询。在此查询中,您可以使用 limit 来限制服务器返回的结果。当您从服务器获得结果时,您需要:

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

对服务器的下一次调用将只获取更新的行。为了实现它,您需要:

  • 从您的NSUserDefaults(我们上面保存的那个)获取最后一个同步日期
  • 执行查询,但这次的条件为 greaterThan 您的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()

    }

请注意这里我使用了解析本地数据存储,它允许您轻松地将解析对象存储到本地数据库,而无需使用核心数据。 Parse本地数据存储由解析iOS SDK提供,为您节省了大量的时间和精力,因此我强烈建议您利用它。 本地数据存储还会照顾您创建/更新的对象,它将自动创建新对象并更新现有对象。

您可以在here

中详细了解相关信息