1

我正在尝试学习restkit,现在正在研究对象映射。这是我尝试接收和处理的 JSON(由 ASP.NET MVC Web API 生成):

[
    {
        "Id": 0,
        "Title": "Test",
        "Location": "Test",
        "Score": {
            "Hill": 10,
            "LVille": 12
        },
        "TimeStart": "2012-11-10T12:30:00",
        "TimeEnd": "2012-11-10T13:20:00",
        "Gender": 0,
        "State": 0
    },
    {
        "Id": 0,
        "Title": "ee",
        "Location": "12:00",
        "Score": {
            "Hill": 13,
            "LVille": 0
        },
        "TimeStart": "12:00 PM",
        "TimeEnd": "12:00 PM",
        "Gender": 1,
        "State": 1
    }
]

被映射到的对象是(SBGame):

@interface SBGame : NSObject

@property (nonatomic, copy) NSNumber* Id;
@property (nonatomic, copy) NSString* Title;
@property (nonatomic, copy) NSString* Location;
@property (nonatomic, strong) SBScore* Score;
@property (nonatomic, copy) NSString* TimeStart;
@property (nonatomic, copy) NSString* TimeEnd;
@property (nonatomic, copy) NSNumber* Gender;
@property (nonatomic, copy) NSNumber* State;

@end

和 SBScore :

@interface SBScore : NSObject
@property (nonatomic, copy) NSNumber* Hill;
@property (nonatomic, copy) NSNumber* LVille;
@end

最后但并非最不重要的对象映射

RKObjectMapping *ScoreMapping = [RKObjectMapping mappingForClass:[SBScore class]];
[ScoreMapping addAttributeMappingsFromArray:@[@"Hill", @"LVille"]];


RKObjectMapping *GameMapping = [RKObjectMapping mappingForClass:[SBGame class]];
[GameMapping addAttributeMappingsFromDictionary:@{
    @"Id" : @"Id",
    @"Title" : @"Title",
    @"Location" : @"Location",
    @"TimeStart" : @"TimeStart",
    @"TimeEnd" : @"TimeEnd",
    @"Gender" : @"Gender",
    @"State" : @"State",
 }];

[GameMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"score" toKeyPath:@"score" withMapping:ScoreMapping]];


RKResponseDescriptor *decp = [RKResponseDescriptor responseDescriptorWithMapping:GameMapping pathPattern:@"/Games" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:decp];

毕竟我收到的错误是

2012-12-29 16:49:19.553 Scoreboard[3004:c07] Failure with error Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 
"Unable to find any mappings for the given content" UserInfo=0x75c1460 {DetailedErrors=(
), NSLocalizedDescription=Unable to find any mappings for the given content, keyPath=null}

我对 RestKit 很陌生,我已经阅读了对象映射教程,但它仍然不起作用。任何想法都非常感谢。

4

1 回答 1

1

我想到了。当我创建默认实例时,我创建了基本 URL www.example.com/api,然后只创建了绑定和 getObjects 方法/Games

我应该做的是让基本 URLwww.example.com将路径模式设置为/api/Games并调用 getObjects 方法/api/games

所以从显示的代码

RKResponseDescriptor *decp 
= [RKResponseDescriptor responseDescriptorWithMapping:GameMapping
                                          pathPattern:@"/Games" 
                                              keyPath:nil
                                          statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

更改为

RKResponseDescriptor *decp 
= [RKResponseDescriptor responseDescriptorWithMapping:GameMapping
                                          pathPattern:@"/api/Games"
                                              keyPath:nil
                                          statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
于 2012-12-30T05:54:51.570 回答