RestKit 0.20映射字符串数组

时间:2013-10-24 01:08:04

标签: objective-c json core-data restkit restkit-0.20

所以在阅读this answer之后,我看不出我的情况有何不同,但提议的解决方案似乎在RestKit 0.20.3中不起作用

对于以下json:

{
   "photos": [
      "872ac577-3f31-47a0-966e-6f2ed2fbabcd"
     ],
   "imageUrl": [
      "http://domain/WebAPI/FileUpload/10232013629_21382571406.439790.jpeg"
     ]
}

映射到以下对象:

@class Picture, Site, Survey;

@interface Job : NSManagedObject

@property (nonatomic, retain) NSString * jobId;
@property (nonatomic, retain) NSString * jobName;
@property (nonatomic, retain) NSString * jobStatusId;
@property (nonatomic, retain) NSString * jobStatus;
@property (nonatomic, retain) NSString * projectId;
@property (nonatomic, retain) NSString * projectType;
@property (nonatomic, retain) NSString * siteId;
@property (nonatomic, retain) NSSet *surveys;
@property (nonatomic, retain) NSSet *photos;
@property (nonatomic, retain) NSDate *createdDate;
@property (nonatomic, retain) Site *site;
@end

photos是一个Picture对象,如下所示:

@interface Picture : NSManagedObject
@property (nonatomic, retain) NSData * data;
@property (nonatomic, retain) NSString * photoId;
@property (nonatomic, retain) NSString * pictureLoc;
@property (nonatomic, retain) NSString * imageUrl;
@property (nonatomic, retain) Job *job;
@property (nonatomic, retain) QuestionAnswer *question;
@end

我想将photosimageUrl分别映射到Picture的{​​{1}}和photoId。我以为我可以在imageUrl的映射中使用以下内容:

Job

但是,映射的RKEntityMapping *ret = [RKEntityMapping mappingForEntityForName:@"Job" inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore ]; [ret addAttributeMappingsFromDictionary: @{ @"photos": @"photos.photoId", @"imageUrl": @"photos.imageUrl", }]; 始终在Job属性中没有任何内容。

我知道我正在正确地执行所有中间步骤(比如实际使用photos进行映射),因为JSON是一个包含许多其他键的代码片段,我能够映射没有问题。我究竟做错了什么?请告诉我

修改

根据Wain的答案更改了映射代码:

ret

现在我添加了一个RKEntityMapping *ret = [RKEntityMapping mappingForEntityForName:@"Job" inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore ]; RKEntityMapping *subMapping = [RKEntityMapping mappingForEntityForName:@"Picture" inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore ]; [subMapping addAttributeMappingsFromDictionary: @{ @"photos":@"photoId", @"imageUrl":@"imageUrl" }]; [ret addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:nil toKeyPath:@"photos" withMapping:subMapping]]; 对象,Picturenil photoId(是的,我检查确保我有拼写和大小写正确的JSON键)

1 个答案:

答案 0 :(得分:0)

photos中没有任何内容的原因是您的映射不会告诉它创建新对象。

问题是如何告诉它创建单个对象并将其中的两个参数都设置为它。问题是因为你有2个不同的数组。我希望你拥有的JSON是1个数组,其中包含具有该特定条目的所有详细信息的字典。 RestKit可以处理两个数组,但会导致创建2个不同的photo个对象。为此,您需要第二个映射,其中包含nil密钥路径以及从ret到新映射的关系。

另一种方法是更改​​Job对象,使其具有2个NSArray s的可转换(或瞬态)属性。如果您将ret设置为仅映射@"photos" : @"photos"@"imageUrl" : @"imageUrl",那么RestKit将映射所有数据,而不是映射到photo对象。如果您想要完成映射,则可以改变此数据...