如何通过 iOS 6 中的 RESTkit 2.0 将 JSON 中的 base64 图像导入核心数据二进制文件?
Posted
技术标签:
【中文标题】如何通过 iOS 6 中的 RESTkit 2.0 将 JSON 中的 base64 图像导入核心数据二进制文件?【英文标题】:How can I import base64 image in JSON into core data binary via RESTkit 2.0 in iOS 6? 【发布时间】:2013-06-06 12:47:34 【问题描述】:我一直在使用 RKManagedObjectImporter 中的 importObjectsFromItemAtPath(使用 RESTkit 2.0 框架)从 JSON 文件中导入一些数据并将其放入核心数据中。我想在 JSON 文件中放一些小图像。我已将这些转换为 base64 字符串。我知道如何将 base64 字符串转换为二进制数据以存储在核心数据中以及如何检索它并创建 UIImage,但我不知道如何使用 importObjectsFromItemPath 将 base64 字符串转换为二进制数据p>
我目前正在使用一种解决方法,即仅读取 JSON,然后手动将 base64 字符串转换为二进制数据,然后将其存储到核心数据中,但我更喜欢使用 RESTkit 映射方法,因为我将它用于所有其他 JSON文件。有谁知道这样可以吗?
【问题讨论】:
您如何阅读解决方法中的 JSON?您能否在该 setter 方法中映射到模型类和实现的临时属性以进行转换? 我的解决方法是使用 NSJSONSerialization 将 JSON 文件转换为字典,然后循环遍历 dic 内容并将它们作为新实体对象添加到核心数据中,但我会将 JSON base64 字符串转换为二进制数据在此之前。这并不太麻烦,因为我没有在此表中使用任何关系。我想过读入一个临时字符串属性,然后转换并放入二进制属性,但这似乎比我目前的解决方法更努力。 【参考方案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];
【讨论】:
以上是关于如何通过 iOS 6 中的 RESTkit 2.0 将 JSON 中的 base64 图像导入核心数据二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章
RestKit iOS 教程 - Xcode 无法识别 RestKit 类方法 - 缺少框架?
如何将 Restkit for IOS 中的编码从 Utf8 更改为 Wincp1251
Restkit 0.10.0 & ios 6.1 - objectLoaderWithResourcePath:delegate 方法不进行 http 调用