RestKit - 将动态属性映射到键值对
RestKit - map dynamic attributes to key value pair
我希望使用 restkit 映射以下 JSON。
"ObjectDetails":
[
{
"ObjectName":"Test1",
"Properties":
{
"PropertyName1":1,
"PropertyName3":2
}
},
{
"ObjectName":"Test2",
"Properties":
{
"PropertyName1":1,
"PropertyName2":"asdf"
}
},
{
"ObjectName":"Test3",
"Properties":
{
"PropertyName1":1,
"PropertyName6":3423,
"PropertyName7":"test",
"PropertyName3":2
}
}
]
对象
@interface ObjectDetail : NSObject
@property (nonatomic, strong) NSString *objectName;
//????
@end
映射
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[ObjectDetail class]];
[mapping addAttributeMappingsFromDictionary:@{@"ObjectName":@"objectName"}];
RKResponseDescriptor *rd = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodAny pathPattern:nil keyPath:@"ObjectDetails" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
我的问题是 'Properties' 具有动态属性。我还没有找到将属性映射到任何东西的方法。理想情况下,最好将 Properties 映射到 key/value 字典。我确实需要字段名称和值。
即
@interface ObjectDetail : NSObject
@property (nonatomic, strong) NSString *objectName;
@property (nonatomic, strong) NSMutableDictionary *properties;
@end
有没有人知道这个的解决方案或知道如何实施它?
更新:基于@Idali 解决方案,非常简单。如果您觉得有帮助,请务必为他们的回答点赞!
对象
@interface ObjectDetail : NSObject
@property (nonatomic, strong) NSString *objectName;
@property (nonatomic, strong) id *properties;
@end
映射
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[ObjectDetail class]];
[mapping addAttributeMappingsFromDictionary:@{@"ObjectName":@"objectName", @"Properties": @"properties"}];
那就施放吧
self.myDictionnay = (NSDcitionnary*) objectDetail.properties;
您可以通过在核心数据中将 "properties" 属性设置为 transformable
类型并在您的 ObjectCalss 中将其声明为 id
并映射它来解决它。
如果您创建 ManagedObject 子类,它将是:
@property (nonatomic, retain) id properties;
要阅读您可以投射的内容:
....
....
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
ObjectDetail* objectDetail =[fetchedObjects firstObject];
self.myDictionnay = (NSDcitionnary*) objectDetail.properties;
NSArray* keys = [self.myDictionnay allKeys]; //to check for existence of any key
我希望使用 restkit 映射以下 JSON。
"ObjectDetails":
[
{
"ObjectName":"Test1",
"Properties":
{
"PropertyName1":1,
"PropertyName3":2
}
},
{
"ObjectName":"Test2",
"Properties":
{
"PropertyName1":1,
"PropertyName2":"asdf"
}
},
{
"ObjectName":"Test3",
"Properties":
{
"PropertyName1":1,
"PropertyName6":3423,
"PropertyName7":"test",
"PropertyName3":2
}
}
]
对象
@interface ObjectDetail : NSObject
@property (nonatomic, strong) NSString *objectName;
//????
@end
映射
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[ObjectDetail class]];
[mapping addAttributeMappingsFromDictionary:@{@"ObjectName":@"objectName"}];
RKResponseDescriptor *rd = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodAny pathPattern:nil keyPath:@"ObjectDetails" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
我的问题是 'Properties' 具有动态属性。我还没有找到将属性映射到任何东西的方法。理想情况下,最好将 Properties 映射到 key/value 字典。我确实需要字段名称和值。
即
@interface ObjectDetail : NSObject
@property (nonatomic, strong) NSString *objectName;
@property (nonatomic, strong) NSMutableDictionary *properties;
@end
有没有人知道这个的解决方案或知道如何实施它?
更新:基于@Idali 解决方案,非常简单。如果您觉得有帮助,请务必为他们的回答点赞!
对象
@interface ObjectDetail : NSObject
@property (nonatomic, strong) NSString *objectName;
@property (nonatomic, strong) id *properties;
@end
映射
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[ObjectDetail class]];
[mapping addAttributeMappingsFromDictionary:@{@"ObjectName":@"objectName", @"Properties": @"properties"}];
那就施放吧
self.myDictionnay = (NSDcitionnary*) objectDetail.properties;
您可以通过在核心数据中将 "properties" 属性设置为 transformable
类型并在您的 ObjectCalss 中将其声明为 id
并映射它来解决它。
如果您创建 ManagedObject 子类,它将是:
@property (nonatomic, retain) id properties;
要阅读您可以投射的内容: .... ....
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
ObjectDetail* objectDetail =[fetchedObjects firstObject];
self.myDictionnay = (NSDcitionnary*) objectDetail.properties;
NSArray* keys = [self.myDictionnay allKeys]; //to check for existence of any key