0

我一直在使用RKManagedObjectImporter中的importObjectsFromItemAtPath(使用 RESTkit 2.0 框架)从 JSON 文件中导入一些数据并将其放入核心数据中。我想在 JSON 文件中放一些小图像。我已将这些转换为 base64 字符串。我知道如何将 base64 字符串转换为二进制数据以存储在核心数据中,以及如何检索它并创建 UIImage,但我不知道如何使用importObjectsFromItemPath将 base64 字符串转换为二进制数据

我目前正在使用一种解决方法,即仅读取 JSON,然后手动将 base64 字符串转换为二进制数据,然后将其存储到核心数据中,但我更喜欢使用 RESTkit 映射方法,因为我将它用于所有其他 JSON 文件。有人知道这是否可以做到吗?

4

1 回答 1

1

您应该能够使用 RKValueTransformer 为您执行此操作。基本上,这些是用于在本机类型和 JSON 响应之间进行映射的对象(反之亦然)。

这是我的将base64字符串(可能来自JSON)转换为NSData。

[RKValueTransformer.defaultValueTransformer
 insertValueTransformer:
 [RKBlockValueTransformer
  valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class inputValueClass, __unsafe_unretained Class outputValueClass) {
      return [inputValueClass isSubclassOfClass:[NSString class]] && [outputValueClass isSubclassOfClass:[NSData class]];
  }
  transformationBlock:^BOOL(id inputValue, __autoreleasing id *outputValue, __unsafe_unretained Class outputClass, NSError *__autoreleasing *error) {
      RKValueTransformerTestInputValueClassIsSubclassOfClass(outputClass, [NSString class], error);
      RKValueTransformerTestOutputValueClassIsSubclassOfClass(outputClass, [NSData class], error);
      // If iOS7+
      //*outputValue = [[NSData alloc] initWithBase64EncodedString:(NSString*)inputValue options:0];
      // If iOS6-
      *outputValue = [[NSData alloc] initWithBase64Encoding:(NSString*)inputValue];
      return YES;
  }] atIndex:0];
于 2014-06-18T18:32:59.740 回答