RestKit - 不符合键值编码,在 JSON 中没有根

Posted

技术标签:

【中文标题】RestKit - 不符合键值编码,在 JSON 中没有根【英文标题】:RestKit - Not key-value coding compliant, no root in JSON 【发布时间】:2013-03-23 21:21:47 【问题描述】:

我一直在尝试从 JSON 响应以及我在控制台输出中看到的所有内容中映射以下对象,没有任何原因导致映射不成功 - 如果有人可以检查一下,我将不胜感激见:

@interface RKElectionsModel : NSObject

@property (nonatomic, assign) bool isActive;
@property (nonatomic, strong) NSNumber *electionID;
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *summary;
@property (nonatomic, strong) NSNumber *availableSeats;
@property (nonatomic, strong) NSNumber *candidatesCount;
@property (nonatomic, strong) NSNumber *withdrawnCount;
@property (nonatomic, strong) NSSet *candidates;

@end

/**
 * Election Detail Mapping: Getting all election details, we have some extra information from
 * the API call
 *
*/
RKObjectMapping *electionDetailsMapping = [RKObjectMapping mappingForClass:[RKElectionsModel class]];

// Map JSON -> entities
[electionDetailsMapping addAttributeMappingsFromDictionary:@
     @"id": @"electionID",
     @"title": @"title",
     @"summary": @"summary",
     @"active": @"isActive",
     @"availableSeats": @"availableSeats",
     @"candidatesCount": @"candidatesCount",
     @"withdrawnCount": @"withdrawnCount"
 ];

// Register our mappings with the provider
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:electionDetailsMapping pathPattern:@"/api/elections/:electionID/all" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

pastebin 上的Console output 以及您可以访问here 的任何 JSON 响应示例

感谢任何帮助, 刘易斯

【问题讨论】:

【参考方案1】:

似乎您试图将 NSString 映射到 NSNumber。

在您的NSObject 中尝试添加以下验证,并在映射开始时将您从服务器收到的字符串转换为 NSNumber。

- (BOOL)validateAvailableSeats:(id *)ioValue error:(NSError **)outError 
       // Force the value to be a NSNumber
       *ioValue = [NSNumber numberWithDouble:[(NSString*)value doubleValue] ]
       return YES;

在RestKit Wiki 中,您会发现更多值的转换。

【讨论】:

以上是关于RestKit - 不符合键值编码,在 JSON 中没有根的主要内容,如果未能解决你的问题,请参考以下文章

对于使用 RestKit v0.20.0 的键 Text,此类不符合键值编码

RestKit - 不符合键值编码

Restkit - 实体(空)不符合键“行”的键值编码

CoreData 严重应用程序错误:实体不符合键值编码

使用 Restkit 0.20 映射此类与键的键值编码不兼容

RestKit 和 Restlet JSON 键值