我目前在iOS项目中使用RestKit版本0.20.3与我的后端Web服务进行通信。
在某些情况下,我的Web服务以字符串格式返回一个标记数组(django-taggit),我需要将每个标记字符串映射到核心数据实体。
// example JSON from web service
"response" : { "tags": ["tag1", "tag2", "tag3"] }
// example Core Data entities
@interface TagEntity : NSManagedObject
@property (nonatomic, retain) NSString *tagName;
@end
从下面的讨论中,我找到了一种将标记字符串数组映射到核心数据对象的方法。
https://groups.google.com/forum/#!topic/restkit/54eZFQIjl7c
tagEntityMapping = [RKEntityMapping mappingForEntityForName:@"TagEntity" inManagedObjectStore:[RKManagedObjectStore defaultStore]];
[tagEntityMapping addPropertyMapping:[RKAttributeMapping mappingFromKeyPath:nil toKeyPath:@"tagName"]]
tagEntityMapping.identificationAttributes = @[@"tagName"];
[resultEntityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"tags" toKeyPath:@"tags"withMapping:tagEntityMapping]];
现在,我正在寻找一种方法将Core Data对象的标记字符串数组发布到Web服务。
换句话说,鉴于我有一个TagEntity核心数据对象数组,我希望发送一个[TagEntity tagName]数组
为实现这一点,我使用[resultEntityMapping inverseMapping]作为请求映射,但结果是,我得到了
"request" : { "tags": [{"tag1": {}}, {"tag2": {}}, {"tag3": {}}] }
而我真正想要的是
"request" : { "tags": ["tag1", "tag2", "tag3"] }
我将不胜感激任何帮助。谢谢!
答案 0 :(得分:0)
如果您只有一个TagEntity
个实例数组,那么您可以使用以下代码获取字符串数组:
NSArray *tagStrings = [tags valueForKey:@"tagName"];
一旦你有了,你可以将数组传递给RestKit(根据你的样本JSON包装成NSDictionary
)或直接使用NSJSONSerialization
并使用底层的AFNetworking提供的API发送JSON。 / p>