我正在使用RestKit从Restful Web Service获取数据.使用平面文件,它可以很好地工作.如果我想获得嵌套JSON的响应,我的问题就开始了.
我的JSON看起来像:
[{"homename":"Alien","created_at":"2011-09-15T12:46:37Z", "updated_at":"2011-09-15T12:46:37Z","gametype":"Final match", "id":1,"date":"2016-10-10","guestname":"Predator", "news":[{"minute":null,"created_at":"2011-09-15T13:19:51Z","player":null,"title":"Title", "updated_at":"2011-09-15T13:19:51Z","id":1,"bodytext":"News","game_id":1},{"minute":null,"created_at":"2011-09-15T13:22:06Z","player":null,"title":"New news","updated_at":"2011-09-15T13:22:06Z","id":2,"bodytext":"Old socks","game_id":1},{"minute":null,"created_at":"2011-09-15T13:26:32Z","player":null,"title":"another title","updated_at":"2011-09-15T13:26:32Z","id":3,"bodytext":"Bodytext 2","game_id":1},{"minute":null,"created_at":"2011-09-22T12:35:19Z","player":null,"title":"comment","updated_at":"2011-09-22T12:35:19Z","id":4,"bodytext":"body of the comment","game_id":1}]}]
Run Code Online (Sandbox Code Playgroud)
使用以下代码,我想获取映射的数据.
RKLogConfigureByName("RestKit/Network*", RKLogLevelTrace);
// Initialize RestKit
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://X.X.X.X:3000"];
// Enable automatic network activity indicator management
//objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
RKObjectMapping* newsMapping = [RKObjectMapping mappingForClass:[News class]];
[newsMapping mapKeyPath:@"id" toAttribute:@"id"];
[newsMapping mapKeyPath:@"minute" toAttribute:@"minute"];
[newsMapping mapKeyPath:@"title" toAttribute:@"title"];
[newsMapping mapKeyPath:@"bodytext" toAttribute:@"bodytext"];
// Setup our object mappings
RKObjectMapping* gameMapping = [RKObjectMapping mappingForClass:[Game class]];
// [gameMapping mapKeyPath:@"id" toAttribute:@"id"];
[gameMapping mapKeyPath:@"guestname" toAttribute:@"guestname"];
[gameMapping mapKeyPath:@"homename" toAttribute:@"homename"];
[gameMapping mapKeyPath:@"date" toAttribute:@"date"];
[gameMapping mapKeyPath:@"gametype" toAttribute:@"gametype"];
[gameMapping mapKeyPath:@"news" toAttribute:@"news"];
[gameMapping mapKeyPath:@"news" toRelationship:@"news" withMapping:newsMapping];
[objectManager.mappingProvider setMapping:gameMapping forKeyPath:@"games"];
Run Code Online (Sandbox Code Playgroud)
该语句
[gameMapping mapKeyPath:@"news" toRelationship:@"news" withMapping:newsMapping];
在运行时引发异常,我无法弄清楚原因:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to add mapping for keyPath news, one already exists...'
Run Code Online (Sandbox Code Playgroud)
有人看到我做错了吗?1:n关系的关系是否错误?
mja*_*mja 14
您有两个news
keyPath 映射:
[gameMapping mapKeyPath:@"news" toAttribute:@"news"];
Run Code Online (Sandbox Code Playgroud)
和
[gameMapping mapKeyPath:@"news" toRelationship:@"news" withMapping:newsMapping];
Run Code Online (Sandbox Code Playgroud)
删除第一个,看看它是否有帮助.
干杯.
归档时间: |
|
查看次数: |
2014 次 |
最近记录: |