如何使用 RKValueTransformer 将 NSString 转换为 Core Data NSManagedObject

Posted

技术标签:

【中文标题】如何使用 RKValueTransformer 将 NSString 转换为 Core Data NSManagedObject【英文标题】:How to use a RKValueTransformer to convert a NSString to a Core Data NSManagedObject 【发布时间】:2014-11-21 18:27:05 【问题描述】:

我从服务器返回一个字符串,我需要将它转换成一个状态对象,它是NSManagedObject 的一个子类。转换器工作正常,只是在映射时我不知道ManagedObjectContext 是什么,所以我收到错误illegal attempt to establish a relationship 'state' between objects in different contexts

RKEntityMapping 知道如何在映射操作期间自动创建正确的对象,因此该功能在 RestKit 中。如何正确创建这个核心数据对象?

RKValueTransformer *stateTransformer = [RKBlockValueTransformer valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class sourceClass, __unsafe_unretained Class destinationClass) 
    return ([sourceClass isSubclassOfClass:[NSString class]] && [destinationClass isSubclassOfClass:[State class]]);
 transformationBlock:^BOOL(id inputValue, __autoreleasing id *outputValue, Class outputValueClass, NSError *__autoreleasing *error) 
    // Validate the input and output
    RKValueTransformerTestInputValueIsKindOfClass(inputValue, [NSString class], error);
    RKValueTransformerTestOutputValueClassIsSubclassOfClass(outputValueClass, [State class], error);

    State *state = [NSEntityDescription insertNewObjectForEntityForName:@"State" inManagedObjectContext:managedObjectStore.mainQueueManagedObjectContext];

    state.abbreviation = inputValue;

    *outputValue = state;

    return YES;
];

【问题讨论】:

【参考方案1】:

看起来您正在创建状态对象并将字符串设置为对象的单个属性。为此,您不需要自定义转换器,只需使用 nil 键路径映射。

参见the Object-mapping wiki page 的Mapping Values without Key Paths 部分。

【讨论】:

以上是关于如何使用 RKValueTransformer 将 NSString 转换为 Core Data NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章

如何使用静态库传输资源文件(如何将资源包装在包中)?

如何将 CameraX 与 PreviewView 一起使用?

如何将 groupBy 与 MagicalRecord 一起使用?

如何将 ASTextNode 与 TTTAttributedLabel 一起使用

我们如何将 OCP 与委托一起使用?

如何使用 AngularJS 将文件上传到 Google Drive