如何使用RKValueTransformer将NSString转换为核心数据NSManagedObject

问题描述:

我从服务器获取一个字符串,并且需要将其转换为State对象,该对象是NSManagedObject的子类。变压器工作正常,但我不知道在映射时ManagedObjectContext是什么,所以我得到错误illegal attempt to establish a relationship 'state' between objects in different contexts如何使用RKValueTransformer将NSString转换为核心数据NSManagedObject

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; 
}]; 

它看起来像你正在创建你的状态对象,并将字符串设置为对象的单个属性。要做到这一点,你不需要一个自定义转换器,你只需要使用一个零键路径映射。

查看the Object-mapping wiki pageMapping Values without Key Paths部分。