Ios 找不到RestKit的可映射关系值keyPath
我无法使用RestKit将JSON映射到核心数据。他说:Ios 找不到RestKit的可映射关系值keyPath,ios,json,restkit,Ios,Json,Restkit,我无法使用RestKit将JSON映射到核心数据。他说: Did not find mappable relationship value keyPath. 我显然做错了什么 日志: 以下是我的映射: objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"AppCD.sqlite"]; RKManagedObjectMapping* entityClassItemValueMappin
Did not find mappable relationship value keyPath.
我显然做错了什么
日志:
以下是我的映射:
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"AppCD.sqlite"];
RKManagedObjectMapping* entityClassItemValueMapping = [RKManagedObjectMapping mappingForClass:[EntityClassItemValue class] inManagedObjectStore:[[RKObjectManager sharedManager] objectStore]];
entityClassItemValueMapping.primaryKeyAttribute = @"name";
[entityClassItemValueMapping mapKeyPath:@"NAME" toAttribute:@"name"];
[entityClassItemValueMapping mapKeyPath:@"VALUE" toAttribute:@"value"];
RKManagedObjectMapping* entityClassItemMapping = [RKManagedObjectMapping mappingForClass:[EntityClassItem class] inManagedObjectStore:[[RKObjectManager sharedManager] objectStore]];
entityClassItemMapping.primaryKeyAttribute = @"iqid";
[entityClassItemMapping mapKeyPath:@"IQID" toAttribute:@"iqid"];
RKManagedObjectMapping* entityClassMapping = [RKManagedObjectMapping mappingForClass:[EntityClass class] inManagedObjectStore:[[RKObjectManager sharedManager] objectStore]];
entityClassMapping.primaryKeyAttribute = @"type";
[entityClassMapping mapKeyPath:@"OBJECTCLASS" toAttribute:@"type"];
[entityClassMapping mapKeyPath:@"TIMESTAMP" toAttribute:@"timestamp"];
[entityClassMapping mapKeyPath:@"VALUES" toRelationship:@"values" withMapping:entityClassItemMapping];
[entityClassItemMapping mapKeyPath:@"DATA" toRelationship:@"entityClassItemValues" withMapping:entityClassItemValueMapping];
[[RKObjectManager sharedManager].mappingProvider setMapping:entityClassMapping forKeyPath:@"JSONDATA"];
[[RKObjectManager sharedManager].mappingProvider setMapping:entityClassItemMapping forKeyPath:@"VALUES"];
[[RKObjectManager sharedManager].mappingProvider setMapping:entityClassItemValueMapping forKeyPath:@"DATA"];
[[objectManager client] setValue:[cookies objectForKey:@"Cookie"] forHTTPHeaderField:@"Cookie"];
NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys:query, @"Targ", @"", @"Query", @"F285E67F2C8CEC9837B68", @"$SESSION", @"3A7037FA806156C4", @"VERSION", nil];
[objectManager loadObjectsAtResourcePath:URL_DATA usingBlock:^(RKObjectLoader *loader) {
loader.method = RKRequestMethodPOST;
loader.params = params;
loader.mappingProvider = [RKObjectManager sharedManager].mappingProvider;
loader.onDidLoadObjects = loadBlock;
loader.onDidFailWithError = failBlock;
}];
我的CoreData模型是:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class EntityClassItem;
@interface EntityClass : NSManagedObject
@property (nonatomic, retain) NSString * timestamp;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSSet *values;
@end
@interface EntityClass (CoreDataGeneratedAccessors)
- (void)addValuesObject:(EntityClassItem *)value;
- (void)removeValuesObject:(EntityClassItem *)value;
- (void)addValues:(NSSet *)values;
- (void)removeValues:(NSSet *)values;
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class EntityClassItem;
@interface EntityClass : NSManagedObject
@property (nonatomic, retain) NSString * timestamp;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSSet *values;
@end
@interface EntityClass (CoreDataGeneratedAccessors)
- (void)addValuesObject:(EntityClassItem *)value;
- (void)removeValuesObject:(EntityClassItem *)value;
- (void)addValues:(NSSet *)values;
- (void)removeValues:(NSSet *)values;
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class EntityClassItem;
@interface EntityClassItemValue : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * value;
@property (nonatomic, retain) EntityClassItem *entityClassItem;
#导入
#进口
@类EntityClassItem;
@接口实体类:NSManagedObject
@属性(非原子,保留)NSString*时间戳;
@属性(非原子,保留)NSString*类型;
@属性(非原子,保留)NSSet*值;
@结束
@接口EntityClass(CoreDataGeneratedAccessor)
-(void)addValuesObject:(EntityClassItem*)值;
-(void)移除ValuesObject:(EntityClassItem*)值;
-(void)addValues:(NSSet*)值;
-(void)移除值:(NSSet*)值;
#进口
#进口
@类EntityClassItem;
@接口实体类:NSManagedObject
@属性(非原子,保留)NSString*时间戳;
@属性(非原子,保留)NSString*类型;
@属性(非原子,保留)NSSet*值;
@结束
@接口EntityClass(CoreDataGeneratedAccessor)
-(void)addValuesObject:(EntityClassItem*)值;
-(void)移除ValuesObject:(EntityClassItem*)值;
-(void)addValues:(NSSet*)值;
-(void)移除值:(NSSet*)值;
#进口
#进口
@类EntityClassItem;
@接口EntityClassItemValue:NSManagedObject
@属性(非原子,保留)NSString*名称;
@属性(非原子,保留)NSString*值;
@属性(非原子,保留)EntityClassItem*EntityClassItem;
我在对文档进行了大量调试和重读后,终于找到了答案。我对以下方面缺乏了解:
mapKeyPath:@"foo" toRelationship:@"bar" withMapping:fooBar];
正如文档明确指出的那样,除了JSON负载中的节点外,mapKeyPath还必须同时匹配要映射到的对象的属性。我的有效负载案例不匹配,因此失败。我从未使用过
RestKit
,但奇怪的是,您同时拥有mapKeyPath:
和setMapping:
调用值。我那没受过教育的孩子2美分。
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class EntityClassItem;
@interface EntityClass : NSManagedObject
@property (nonatomic, retain) NSString * timestamp;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSSet *values;
@end
@interface EntityClass (CoreDataGeneratedAccessors)
- (void)addValuesObject:(EntityClassItem *)value;
- (void)removeValuesObject:(EntityClassItem *)value;
- (void)addValues:(NSSet *)values;
- (void)removeValues:(NSSet *)values;
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class EntityClassItem;
@interface EntityClass : NSManagedObject
@property (nonatomic, retain) NSString * timestamp;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSSet *values;
@end
@interface EntityClass (CoreDataGeneratedAccessors)
- (void)addValuesObject:(EntityClassItem *)value;
- (void)removeValuesObject:(EntityClassItem *)value;
- (void)addValues:(NSSet *)values;
- (void)removeValues:(NSSet *)values;
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class EntityClassItem;
@interface EntityClassItemValue : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * value;
@property (nonatomic, retain) EntityClassItem *entityClassItem;
mapKeyPath:@"foo" toRelationship:@"bar" withMapping:fooBar];