关于ios:解析本地数据存储网络同步

Parse Local Datastore + Network Sync

自6个月起,我就在我的iOS应用程序(使用Swift编写)中使用Parse.com,出于多种原因,我想使用Parse Local Datastore:

  • 使我的应用程序可以离线使用(可检索)
  • 减少数据使用量(许多查询返回"未更新数据")
  • 减少加载时间(主要是在启动应用程序并从网络加载所有数据时)

为此,我想编写一个全局函数来处理这些情况,以解决我在应用程序中所做的所有查询。

我已经对该函数应该执行的操作有一个明确的了解,但我不知道该如何从技术上编写此函数:)

场景:

  • 注册/登录(链接多个查询):

  • 从网络获取数据
  • 是否在" lastUpdateLocalDatastore"中保存日期? NSUserDefaults中的变量
  • 在本地数据存储区中固定数据
  • 显示本地数据存储中的数据->返回


    最后,我基于此GitHub主题找到了一种方法:
    https://github.com/ParsePlatform/ParseUI-iOS/issues/53

    这是我使用的功能:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    func findObjectsLocallyThenRemotely(query: PFQuery!, block:[AnyObject]! -> Void) {

        let localQuery = (query.copy() as! PFQuery).fromLocalDatastore()
        localQuery.findObjectsInBackgroundWithBlock({ (locals, error) -> Void in
            if (error == nil) {
                println("Success : Local Query", msg:"\\(query.parseClassName)")
                block(locals)
            } else {
                println("Error : Local Query", msg:"\\(query.parseClassName)", error: error)
            }
            query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
                if(error == nil) {
                    println("Success : Network Query", msg:"\\(query.parseClassName)")
                    PFObject.unpinAllInBackground(locals, block: { (success, error) -> Void in
                        if (error == nil) {
                            println("Success : Unpin Local Query", msg:"\\(query.parseClassName)")
                            block(objects)
                            PFObject.pinAllInBackground(objects, block: { (success, error) -> Void in
                                if (error == nil) {
                                    println("Success : Pin Query Result", msg:"\\(query.parseClassName)")
                                } else {
                                    println("Error : Pin Query Result", msg:"\\(query.parseClassName)", error: error)
                                }
                            })
                        } else {
                            println("Error : Unpin Local Query", msg:"\\(query.parseClassName)", error: error)
                        }
                    })
                } else {
                    println("Error : Network Query", msg:"\\(query.parseClassName)", error: error)
                }
            })
        })
    }

    要做的事情:我需要添加" lastUpdateDate "选项以仅从网络中获取修改后的数据。