所以在阅读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
我想将photos
和imageUrl
分别映射到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]];
对象,Picture
和nil
photoId
(是的,我检查确保我有拼写和大小写正确的JSON键)
答案 0 :(得分:0)
photos
中没有任何内容的原因是您的映射不会告诉它创建新对象。
问题是如何告诉它创建单个对象并将其中的两个参数都设置为它。问题是因为你有2个不同的数组。我希望你拥有的JSON是1个数组,其中包含具有该特定条目的所有详细信息的字典。 RestKit可以处理两个数组,但会导致创建2个不同的photo
个对象。为此,您需要第二个映射,其中包含nil
密钥路径以及从ret
到新映射的关系。
另一种方法是更改Job
对象,使其具有2个NSArray
s的可转换(或瞬态)属性。如果您将ret
设置为仅映射@"photos" : @"photos"
和@"imageUrl" : @"imageUrl"
,那么RestKit将映射所有数据,而不是映射到photo
对象。如果您想要完成映射,则可以改变此数据...