我检查了与我的问题类似的问题(例如this和 this),但我无法找到我的问题的解决方案。我尝试使用来自Restkit 的对象映射页面的教程来映射我的数据,但我无法获得所需的结果。如果有人能指出我的错误,我将不胜感激。
我的问题
当我尝试获取数据时,我的应用程序崩溃,并且我得到“此类不符合键 'GameId.' 的键值编码”。我相信我正在映射项目和答案数组错误。
我正在尝试映射的 JSON
样本:
{
"GameId": 1,
"Items": [
{
"Id": 1,
"PicUrl": "sample string 2",
"Answers": [
"sample string 1",
"sample string 2",
"sample string 3"
],
"CorrectAnswer": "sample string 3",
"Difficulty": 4,
"CategoryId": 5,
"CategoryName": "sample string 6",
"AccountId": 7
},
{
"Id": 1,
"PicUrl": "sample string 2",
"Answers": [
"sample string 1",
"sample string 2",
"sample string 3"
],
"CorrectAnswer": "sample string 3",
"Difficulty": 4,
"CategoryId": 5,
"CategoryName": "sample string 6",
"AccountId": 7
},
{
"Id": 1,
"PicUrl": "sample string 2",
"Answers": [
"sample string 1",
"sample string 2",
"sample string 3"
],
"CorrectAnswer": "sample string 3",
"Difficulty": 4,
"CategoryId": 5,
"CategoryName": "sample string 6",
"AccountId": 7
}
],
"StartTime": "2013-10-07T00:24:22.0048045+00:00"
}
我的数据类
当前游戏.h
#import <Foundation/Foundation.h>
@interface CurrentGames : NSObject
@property (nonatomic,retain) NSNumber *GameId;
@property(nonatomic,strong)NSArray *items;
@property(nonatomic,retain) NSNumber *ID;
@property(nonatomic,retain) NSURL *pictureUrl;
@property (nonatomic,strong) NSArray *answers;
@property(nonatomic,retain) NSString *ans1;
@property (nonatomic,retain)NSString *ans2;
@property(nonatomic,retain)NSString *ans3;
@property (nonatomic,retain)NSString *ans4;
@property(nonatomic,retain) NSString *correctAnswer;
@property(nonatomic,retain) NSString *difficulty;
@property(nonatomic,retain) NSString *categoryID;
@property(nonatomic,retain)NSString *categoryName;
@property(nonatomic,retain)NSString *accountID;
@end
CurrentGames.m
#import "CurrentGames.h"
@implementation CurrentGames
- (id)init
{
self = [super init];
if (self)
{
_answers = [[NSArray alloc]initWithObjects:_ans1,_ans2,_ans3,_ans4, nil];
_items =[[NSArray alloc]initWithObjects:_ID,_pictureUrl,_answers,_correctAnswer,_categoryID,_categoryName,_accountID, nil];
}
return self;
}
@end
我尝试映射的方式
-(void)loadGame
{
RKObjectMapping* currentGameMapping = [RKObjectMapping mappingForClass:[CurrentGames class]];
[currentGameMapping addAttributeMappingsFromDictionary:@{
@"GameId":@"GameId",
@"Items": @"items",
@"Id":@"ID",
@"PicUrl":@"pictureUrl",
@"Answers":@"answers",
@"CorrectAnswer": @"correctAnswer",
@"Difficulty":@"difficulty",
@"CategoryId":@"categoryID",
@"CategoryName":@"categoryName",
@"AccountId":@"accountID",
}];
RKResponseDescriptor *responseDescriptor =[RKResponseDescriptor responseDescriptorWithMapping:currentGameMapping method:RKRequestMethodGET pathPattern:nil keyPath:@"GameId" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
NSURL *URL = [NSURL URLWithString:@"https://picquiz.azurewebsites.net/Games/Current/13"];
NSURLRequest *request =[NSURLRequest requestWithURL:URL];
RKObjectRequestOperation *objectRequestOperation =[[RKObjectRequestOperation alloc]initWithRequest:request responseDescriptors:@[responseDescriptor]];
[objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
RKLogInfo(@"Load collection of Articles: %@", mappingResult.array);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
RKLogError(@"Operation failed with error: %@", error);
}];
[objectRequestOperation start];
}
安慰
2013-10-07 20:16:38.824 FlickRest[1253:a0b] I restkit:RKLog.m:34 RestKit logging initialized...
2013-10-07 20:16:38.952 FlickRest[1253:a0b] I restkit.network:RKObjectRequestOperation.m:180 GET 'https://picquiz.azurewebsites.net/Games/Current/13'
2013-10-07 20:16:39.622 FlickRest[1253:3407] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFNumber 0x8bb3080> valueForUndefinedKey:]: this class is not key value coding-compliant for the key GameId.'
*** First throw call stack:
(
0 CoreFoundation 0x020ca5e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x01e4d8b6 objc_exception_throw + 44
2 CoreFoundation 0x0215a6a1 -[NSException raise] + 17
3 Foundation 0x00c95b0a -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 282
4 Foundation 0x00c02b61 _NSGetUsingKeyValueGetter + 81
5 Foundation 0x00c0219b -[NSObject(NSKeyValueCoding) valueForKey:] + 260
6 Foundation 0x00c21c9a -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 409
7 FlickRest 0x0007e891 -[RKMappingSourceObject valueForKeyPath:] + 833
8 FlickRest 0x00083ea7 -[RKMappingOperation applyAttributeMappings:] + 1671
9 FlickRest 0x0008b89e -[RKMappingOperation main] + 4062
10 Foundation 0x00ca9a69 -[__NSOperationInternal _start:] + 671
11 Foundation 0x00c26798 -[NSOperation start] + 83
12 FlickRest 0x00078f25 -[RKMapperOperation mapRepresentation:toObject:atKeyPath:usingMapping:metadata:] + 1957
13 FlickRest 0x000777a0 -[RKMapperOperation mapRepresentation:atKeyPath:usingMapping:] + 1904
14 FlickRest 0x0007a11d -[RKMapperOperation mapRepresentationOrRepresentations:atKeyPath:usingMapping:] + 829
15 FlickRest 0x0007aa72 -[RKMapperOperation mapSourceRepresentationWithMappingsDictionary:] + 2210
16 FlickRest 0x0007b43b -[RKMapperOperation main] + 1403
17 Foundation 0x00ca9a69 -[__NSOperationInternal _start:] + 671
18 Foundation 0x00c26798 -[NSOperation start] + 83
19 FlickRest 0x000cb7da -[RKObjectResponseMapperOperation performMappingWithObject:error:] + 1354
20 FlickRest 0x000c9813 -[RKResponseMapperOperation main] + 2371
21 Foundation 0x00ca9a69 -[__NSOperationInternal _start:] + 671
22 Foundation 0x00c26798 -[NSOperation start] + 83
23 Foundation 0x00cabd34 __NSOQSchedule_f + 62
24 libdispatch.dylib 0x028de4b0 _dispatch_client_callout + 14
25 libdispatch.dylib 0x028cc088 _dispatch_queue_drain + 450
26 libdispatch.dylib 0x028cbe85 _dispatch_queue_invoke + 126
27 libdispatch.dylib 0x028cce25 _dispatch_root_queue_drain + 83
28 libdispatch.dylib 0x028cd13d _dispatch_worker_thread2 + 39
29 libsystem_c.dylib 0x02bf6e72 _pthread_wqthread + 441
30 libsystem_c.dylib 0x02bdedaa start_wqthread + 30
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Program ended with exit code: 0