【发布时间】:2014-06-20 10:25:15
【问题描述】:
所以我开始在 RestKit 中实现我的第二个项目,前一个非常简单,只需从远程服务中提取内容并填写我的核心数据 db。在当前应用程序中,我正在开发同步功能,因此我想在插入之前验证内容,即将本地存储中的对象与我从远程服务获取的对象进行比较。
我正在阅读 this thread 并发现我可以实现这样的目标。所以我将这两种方法添加到我的模型中。我知道只有一种方法就足够了,但问题在于这两种功能。
@implementation News
@dynamic title;
@dynamic desc;
@dynamic time;
@dynamic category;
@dynamic content;
- (BOOL)validateValue:(inout __autoreleasing id *)ioValue forKeyPath:(NSString *)inKeyPath error:(out NSError *__autoreleasing *)outError{
return NO;
}
- (BOOL)validateTitle:(id *)ioValue error:(NSError **)outError{
return NO;
}
实体映射代码,
RKEntityMapping *userMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass(theClass) inManagedObjectStore:objectManager.managedObjectStore];
userMapping.performsKeyValueValidation = YES;
userMapping.discardsInvalidObjectsOnInsert = YES;
所以我认为,每当一个对象被映射或被覆盖时,这个方法就会被触发。所以 self 将包含当前对象,而 *ioValue 将包含将插入或不插入的新值,我的结论是否正确??
现在在我的应用 self.title 中触发该方法并且 *ioValue 包含 same value 即 来自服务和 self.title 的新值 不包含本地存储中的旧值(可能是对数据库的更改已经发生:( )。另外,如果我从这个方法返回 No 记录仍然被映射,这不应该发生吗?
对此问题的任何见解都会有很大帮助。我即将在不使用 RestKit 的情况下从头开始。
【问题讨论】:
标签: ios core-data restkit restkit-0.20