RESTKIT PUTOBJECT-如果将持久性处理回到核心数据存储中



我正在使用RESTKIT 0.27.0,并设法设法设置了我的核心数据堆栈,几乎就像RESTKITS GITHUB中的TwitterCoredata示例一样。

我还映射了正确的核心数据中对象的get/post请求,,尽管我在put请求方面遇到了麻烦。

看来我的PUT请求正在正确更新服务器上的对象,并且我可以看到它在响应中进行了更新。然后,我去刷新SQLite DB查看器,期望该实体已更新,但事实并非如此。

以adverseLline1为例,它设置为:" 4个地址"。然后,我将其更新为" 4测试此更改"上的NSManagedObject,并将其作为put上的对象传递。

我可以在日志中看到以下内容:

2017-03-02 15:05:18.006 Albert [41779:1232025] T RESTKIT.Object_Mapping:rkmappingoperation.m:748跳过映射 属性值从键盘'squildline1到键盘'squildline1' - 值不变(4测试此更改)

几乎是因为我已经更新了nsmanagedObject上的advellyLine1值,而RESTKIT并没有将其作为更改?

当我重新登录我的应用程序时,它执行了一个get请求,并且当它获取对象时,它意识到瞬态对象与存储在核心中的实体之间存在差异,因此成功地更新了。

我找不到任何putobject:可以帮助我了解我出错的文档,因此根据最新版本的Restkit(截至写作时0.27.0)从引用现有的NSManagedObject,更新其上的属性(属性),然后在PUT请求中以参数为参数,从而从引用现有的NSManagedObject,更新属性(属性)。我想RESTKIT"应该"将持久性处理对我的核心数据,就像在get和发布请求上一样。

看来我误解了RESTKIT如何与Coredata一起工作。

最初,我首先对对象进行所需的更新,然后这样做像这样的PUT请求:

[[RKObjectManager sharedManager] putObject:myObjectWithChanges 
                                 path:path 
                                 parameters:nil 
    success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)

我假设通过将其传递给具有更改的NSManageBject,它将正常工作。它确实更新了服务器,但是在更新Coredata中的实体时会搞砸 - 似乎RestKit认为它已经是最新的,因为我更新了本地的NSManagedObject。

因此,我决定尝试将nil用于对象,并将更改作为参数中的字典传递(如果您提供路径,则不需要在RESTKIT中提供对象):

NSDictionary *dict = @{ 
                        @"addressLine1":@"4 TEST THIS CHANGE 11",
                        @"addressLine2":@"Address line 2",
                        @"postCode":@"WN7 5GB"
                      };
[[RKObjectManager sharedManager] putObject:nil           
                                 path:path 
                                 parameters:dict
    success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)

将其用于PUT,使我可以在核心数据中更新服务器上的对象和本地实体。

我只能假设putObject:中的"对象"仅是告诉RESTKIT它是哪个对象,以便RESTKIT可以选择适当的请求/响应描述符进行路由。这是parameters:参数必须对所述对象进行任何更改。

注意:也可以将您的对象放在呼叫中也可以:

    NSDictionary *dictWithChanges = @{ 
                                        @"addressLine1":@"Change here"
                                     };
    [[RKObjectManager sharedManager] putObject:myObjectWithoutChanges           
                                     path:path 
                                     parameters:dictWithChanges
        success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)

看来RESTKIT会将参数上的更改与对象合并并重建请求。

最新更新