RestKit:当值无效时如何拒绝整个映射
Posted
技术标签:
【中文标题】RestKit:当值无效时如何拒绝整个映射【英文标题】:RestKit: How to reject an entire mapping when a value is not valid 【发布时间】:2014-10-23 19:21:46 【问题描述】:所以我正在尝试支持离线使用我正在制作的使用 REST API 的 ios 应用程序。到目前为止,这是我所拥有的:
使用 REST 接口运行以操作我的数据模型的服务器。 一个使用 RestKit 检索存储在我的服务器上的数据的 iOS 应用程序。 RestKit 在 Core Data 中本地存储服务器响应。当服务器不可用时,我仍然希望用户能够更新数据模型,然后当服务器再次可用时,我希望将这些更新推送到服务器。
我遇到的问题是,当从服务器接收到已在本地更新(但尚未推送到服务器)的值时,它会被服务器响应的内容覆盖。为了防止这种情况发生,如果新的“updatedAt”日期早于当前的“updatedAt”日期,我将尝试取消保存到本地存储。
这是我当前的验证功能:
- (BOOL)validateUpdatedAt:(id *)ioValue error:(NSError **)outError
if(self.updatedAt && [self.updatedAt compare:((NSDate *)*ioValue)] == NSOrderedDescending)
*outError = [NSError errorWithDomain:RKErrorDomain code:RKMappingErrorMappingDeclined userInfo:nil];
return NO;
return YES;
这可行,但只能防止更改此单个值。如果该字段无效,我希望取消该对象的整个更新。我该怎么做?
【问题讨论】:
【参考方案1】:RestKit 提供的支持是设置discardsInvalidObjectsOnInsert 以在验证失败时丢弃整个对象。但是,这对您不起作用,因为它仅适用于正在插入的 NSManagedObject
实例,因为它使用 validateForInsert:
。
您可以考虑使用 validateForUpdate:
执行类似的检查,然后恢复更改,但在您的案例中,RestKit 并没有真正为您提供任何关于中止的信息。
【讨论】:
是的,这基本上是我得出的结论。在那里检查还原感觉有点太笨拙了,所以我决定改变我提出请求的方式,以改善整体系统。我现在使用的是两个日期系统 - 一个日期仅从服务器更新,一个日期在每次本地发生更改时更新。它实际上来自您在this 线程中的回复。以上是关于RestKit:当值无效时如何拒绝整个映射的主要内容,如果未能解决你的问题,请参考以下文章
RestKit - 从 RKRequestDescriptor 中排除具有 nil 值的属性映射