Parse PFObject.fetch没有更新到服务器

时间:2015-07-29 18:37:38

标签: ios swift parse-platform

在我的应用中,我有一个屏幕,用户可以在其中编辑对象的属性。屏幕有2个动作:保存或恢复。

选择还原时,我想将对象的属性还原为存储在服务器上的任何内容,并丢弃所有本地更改。我使用fetch方法执行此操作:

println("1: \(localObject)")
if localObject.isDirty() {
    localObject.fetchInBackgroundWithBlock { serverObject, error in
        println("2: \(localObject)")
        println("3: \(serverObject)")
    }
}

isDirty()正常工作,只有在本地修改并且未保存的情况下才返回true。

根据文档,获取:fetches the PFObject with the current data from the server。但是我在日志中看到的是,所有3个打印语句都显示相同的本地属性。我希望serverObject是存储在服务器上的任何内容,但不是,serverObject也会显示本地修改的属性。

我没有使用本地数据存储区。

发生了什么事?这是Parse SDK的错误吗?或者是否存在缓存问题?

2 个答案:

答案 0 :(得分:2)

如果在不使用本地数据存储区的情况下调用fetch,Parse将在控制台中显示错误。

由于您在致电fetchInBackgroundWithBlock时没有从Parse收到错误,这意味着您在某个时候调用了localObject.pinInBackground()并将该对象放在本地数据存储区中。

对于本地存储的对象,您可以在revert()之前调用fetchInBackgroundWithBlock以在从服务器更新数据之前丢弃本地更改。

if localObject.isDirty() {
    localObject.revert()
    localObject.fetchInBackgroundWithBlock { serverObject, error in
        println("2: \(localObject)")
        println("3: \(serverObject)")
    }
}

答案 1 :(得分:0)

我还没有看过要获取的文档,但我知道您可以通过执行查询来完成您尝试的操作。执行以下操作将从服务器进行查询(尽管如果您已经使用查询首先查看缓存或网络,则可以调整缓存策略):

var query = PFQuery(className:"GameScore")
query.getObjectInBackgroundWithId("xWMyZEGZ") {
    (gameScore: PFObject?, error: NSError?) -> Void in
    if error == nil && gameScore != nil {
        println(gameScore)
    }else {
       println(error)
    }
}

或者,您可以在进行任何更改之前保存本地对象的副本,然后如果它是脏的,您只需将其替换为副本即可。这可能是我为减少解析API调用的数量所做的。