【问题标题】:Post object error in RestKit在 RestKit 中发布对象错误
【发布时间】:2015-09-19 17:30:06
【问题描述】:

我正在使用以下代码发布对象

型号

@interface Event : NSManagedObject
@property (nonatomic, retain) NSString * eventID;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) Calendar *calendar; // many-to-one

@interface Calendar : NSManagedObject
@property (nonatomic, retain) NSString * calendarID;
@property (nonatomic, retain) NSSet *events; // one-to-many

RKRequestDescriptor

RKObjectMapping *calendarRequestMapping = [RKObjectMapping requestMapping];
[calendarRequestMapping addAttributeMappingsFromDictionary:@{
                                                             @"calendarID":@"calendar"}];
RKObjectMapping *postRequestMapping = [RKObjectMapping requestMapping];
[postRequestMapping addAttributeMappingsFromArray:@[ @"title"]];
[postRequestMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"calendar" toKeyPath:@"calendar" withMapping:calendarRequestMapping]];

RKRequestDescriptor * eventRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:postRequestMapping objectClass:[Event class] rootKeyPath:nil method:RKRequestMethodPOST];
[objectManager addRequestDescriptor:eventRequestDescriptor];

发布

[[RKObjectManager sharedManager] postObject:event path:@"/events/" parameters:nil success:nil failure:nil];

根据服务器日志,我贴的是

{u'calendar[calendar]': [u'3b60a22c-d46e-46ca-b978-ec81a8b47fcb'], u'title': [u'xxxxx']}

我期待的是

{u'calendar': [u'3b60a22c-d46e-46ca-b978-ec81a8b47fcb'], u'title': [u'xxxxx']}

我试过了

[calendarRequestMapping addAttributeMappingsFromDictionary:@{
                                                             @"calendarID":nil}];

或者

[postRequestMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"calendar" toKeyPath:nil withMapping:calendarRequestMapping]];

两者都会抛出异常。

【问题讨论】:

  • 您显示的 JSON 无效,需要更正。
  • 对不起,我只是从我的服务器日志中复制了数据,这不是原始的 json 格式。这里的问题是关系字段calendar的关键,我期望的是calendar但是calendar[calendar]
  • 无论如何,感谢您的关注:) @Wain

标签: ios objective-c restkit


【解决方案1】:

我刚刚用下面的映射解决了这个问题

RKObjectMapping *eventRequestMapping = [RKObjectMapping requestMapping];
[eventRequestMapping addAttributeMappingsFromDictionary:@{
                                                         @"title":@"title",
                                                         @"calendar.calendarID":@"calendar"}];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2011-12-05
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多