使用JSON字符串使用RestKit手动将对象加载到Core Data中

使用restkit的开发分支(0.20),有没有办法将JSON字符串映射到核心数据对象存储中?

我知道在0.10中, 本页底部描述的方法有效但是如何在restkit 0.20中执行此操作? 任何指导赞赏! 谢谢!

id parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:MIMEType]; id parsedData = [parser objectFromString:JSONString error:&error]; RKObjectMappingProvider* mappingProvider = [RKObjectManager sharedManager].mappingProvider; RKObjectMapper* mapper = [RKObjectMapper mapperWithObject:parsedData mappingProvider:mappingProvider]; RKObjectMappingResult* result = [mapper performMapping]; 

我昨天安装了RESTKit v0.20.0pre4,对一个特定情况也有同样的需求。

以下是我要映射的JSON字符串的示例:

 {"info":"the sun is shining","detail":"in Bordeaux ~ 29 °C"} 

这就是我执行映射的方式。

 - (InfoRESTMapped *)mapInfoFromJSONString:(NSString *) JSONString{ NSString* MIMEType = @"application/json"; NSError* error; NSData *data = [JSONString dataUsingEncoding:NSUTF8StringEncoding]; id parsedData = [RKMIMETypeSerialization objectFromData:data MIMEType:MIMEType error:&error]; if (parsedData == nil && error) { //deal with error } RKObjectMapping *infoMapping = [RKObjectMapping requestMapping]; [infoMapping addAttributeMappingsFromDictionary:@{ @"info": @"myInfo", @"detail": @"myDetail", }]; InfoRESTMapped *infoMapped = [[InfoRESTMapped alloc] init]; RKMappingOperation* mapper = [[RKMappingOperation alloc] initWithSourceObject:parsedData destinationObject:infoMapped mapping:infoMapping]; [mapper performMapping:&error]; return infoMapped; } 

这些post让我得到了我建议的解决方案:

我希望它有所帮助。 我猜其他人会在最终版本发布时给出更好的解决方案(更好的文档……)。

对于Restkit 0.22,您可以使用此代码。 这将返回一个RKMappingResult,您可以在使用属性.array进行映射后枚举对象。

 - (RKMappingResult *)mapJSONStringWithString:(NSString *)jsonString { RKMappingResult *result = nil; NSError* error; NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; id parsedData = [RKMIMETypeSerialization objectFromData:data MIMEType:RKMIMETypeJSON error:&error]; if (parsedData == nil && error) { NSLog(@"json mapping error"); } NSDictionary *mappingsDictionary = @{@"":[CustomMappingClass getMappingForUsers]}; ObjectClass *obj = [ObjectClass new]; RKMapperOperation *mapper = [[RKMapperOperation alloc] initWithRepresentation:parsedData mappingsDictionary:mappingsDictionary]; NSError *mappingError = nil; mapper.targetObject = obj; BOOL isMapped = [mapper execute:&mappingError]; if (isMapped && !mappingError) { result = [mapper mappingResult]; } return result; } 

使用RestKit将JSON导入核心数据存储的最直接方法在自述文件“生成种子数据库”中有说明

这是我在Swift中写的:

 if let persistentStore = RKManagedObjectStore.default().persistentStoreCoordinator.persistentStores.first { if let objectImporter = RKManagedObjectImporter.init(persistentStore: persistentStore) { let path = Bundle.main.path(forResource: jsonFile, ofType: "json") let mapping = SLTour.responseMapping() var error:NSError? objectImporter.importObjectsFromItem(atPath: path, with: mapping, keyPath: "data", error: &error) try objectImporter.finishImporting() objectImporter.logSeedingInfo() } } 

希望这可以节省一些人在未来几个小时试图解决这个问题。