所以我正在尝试支持离线使用我正在制作的使用 REST API 的 iOS 应用程序。到目前为止,这是我所拥有的:
- 使用 REST 接口(interface)运行的服务器来操作我的数据模型。
- 一个使用 RestKit 检索存储在我的服务器上的数据的 iOS 应用程序。
- RestKit 在 Core Data 中本地存储服务器响应。
当服务器不可用时,我仍然希望用户能够更新数据模型,然后当服务器再次可用时,我希望将这些更新推送到服务器。
我遇到的问题是,当从服务器接收到已在本地更新(但尚未推送到服务器)的值时,它会被服务器响应的内容覆盖。为了防止这种情况,如果新的“updatedAt”日期早于当前的“updatedAt”日期,我会尝试取消保存到本地存储。
这是我当前的验证函数:
- (BOOL)validateUpdatedAtid *)ioValue errorNSError **)outError
{
if(self.updatedAt && [self.updatedAt compare(NSDate *)*ioValue)] == NSOrderedDescending) {
*outError = [NSError errorWithDomain:RKErrorDomain code:RKMappingErrorMappingDeclined userInfo:nil];
return NO;
}
return YES;
}
这可行,但只能防止更改此单个值。如果这个字段无效,我希望取消该对象的整个更新。我该怎么做?
Best Answer-推荐答案 strong>
RestKit 提供的支持是设置 discardsInvalidObjectsOnInsert验证失败时丢弃整个对象。但是,这对您不起作用,因为它仅适用于正在插入的 NSManagedObject 实例,因为它使用 validateForInsert: 。
您可以查看使用 validateForUpdate: 执行类似的检查,然后恢复更改,但 RestKit 并没有真正为您提供任何关于您的案例中止的内容。
关于ios - RestKit:当值无效时如何拒绝整个映射,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/26535763/
|