RestKit putObject - 它是否应该为我持久化回到Core Data存储?
我正在使用RestKit 0.27.0,并设法设置我的核心数据堆栈,几乎和RestCits GitHub中的TwitterCoreData示例中一样。RestKit putObject - 它是否应该为我持久化回到Core Data存储?
我也映射了GET/POST请求,这些请求正确地持久化了核心数据中的对象,虽然我在处理PUT请求时遇到了问题。
看来我的PUT请求正在更新服务器上的对象,并且我可以看到它在响应中更新了。然后我去刷新期望实体已经更新的SQLite数据库查看器,但它没有。
以addressLine1为例,它被设置为:“4 Some Address”。然后我将它更新为NSManagedObject上的“4 TEST THIS CHANGE”并将它作为PUT上的对象传递。
我可以看到在日志中执行以下操作:
2017年3月2日15:05:18.006阿尔伯特[41779:1232025] T, restkit.object_mapping:RKMappingOperation.m:748跳过映射 从的keyPath属性值“addressLine1到的keyPath‘addressLine1’ - 值不变(4测试此更改)
它几乎一样,如果因为我已经更新的NSManagedObject的addressLine1值,即RestKit不捡起它作为一个改变?
当我重新登录到我的应用程序时,它执行GET请求,当它获得Object时,它意识到瞬态对象与存储在CoreData中的实体之间存在差异,因此可以更新它。
我找不到任何putObject:文档,可以帮助我了解哪里出错了,所以基于RestKit的最新版本(截至编写时为0.27.0) - 这将是件好事通过引用现有NSManagedObject开始,提供或引导到一个示例,更新其上的属性(属性),然后将其作为参数发送到PUT请求中。我认为RestKit“应该”为我处理Core Data的持久性,就像它在GET和POST请求上一样。
看起来我误解了RestKit与CoreData的搭配。
本来我是第一次做必要的更新对象,然后做这样的PUT请求:
[[RKObjectManager sharedManager] putObject:myObjectWithChanges
path:path
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
我以为,通过它传递的NSManagedObject与变化,它会正常工作。它确实更新了服务器,但是在更新CoreData中的实体时会搞砸 - 似乎RestKit认为它已经是最新的,因为我更新了本地NSManagedObject。
所以不是我决定尝试用零的对象,并通过改变作为参数的字典(这是不提供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允许我更新服务器上的对象和Core Data中的本地实体。
我只能假设putObject:
中的“对象”只是告诉RestKit它是哪个对象,因此RestKit可以选择合适的请求/响应描述符进行路由。这是parameters:
参数,必须对所述对象进行任何更改。
注:它也是优良把你的对象到调用就像这样:
NSDictionary *dictWithChanges = @{
@"addressLine1":@"Change here"
};
[[RKObjectManager sharedManager] putObject:myObjectWithoutChanges
path:path
parameters:dictWithChanges
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
看来,RestKit将合并与对象参数的变化并重建请求。