2

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

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

id<RKParser> 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];
4

3 回答 3

6

我昨天安装了 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;
}

这些帖子使我找到了我建议的解决方案:

我希望它有所帮助。我想当最终版本发布时,其他一些会提供更好的解决方案(也有更好的文档......)。

于 2012-12-20T21:59:10.110 回答
1

对于 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;
}
于 2014-01-26T01:14:01.157 回答
1

使用 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()
    }
}

希望这将使某人免于在未来数小时尝试解决此问题。

于 2018-04-27T22:36:33.933 回答