RestKit 更新对象映射空属性

Posted

技术标签:

【中文标题】RestKit 更新对象映射空属性【英文标题】:RestKit Update object maps null attributes 【发布时间】:2015-11-26 10:26:49 【问题描述】:

我正在尝试使用 RestKit 库对模型进行部分更新。我已经能够毫无问题地创建/列出模型。此外,我可以使用 Rest API 和邮递员创建/列出和更新。 使用 RestKit 更新时出现问题。

这是我的映射:

RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[UserProfile class]];
NSDictionary *resultsMappingDictionary = @@"id": @"profileId",
                                           @"username": @"username",
                                           @"first_name": @"firstName",
                                           @"last_name": @"lastName",
                                           @"email": @"email",
                                           @"description": @"job",
                                           @"image": @"imgUrl",
                                           @"auth_token": @"authToken"
                                           ;

responseMapping.assignsDefaultValueForMissingAttributes = NO;
[responseMapping addAttributeMappingsFromDictionary:resultsMappingDictionary];

return responseMapping;

当我使用仅包含电子邮件的 UserProfile 对象执行更新时,使用方法

- (void)putObject:(id)object
         path:(NSString *)path
   parameters:(NSDictionary *)parameters
      success:(void (^)(RKObjectRequestOperation *operation, RKMappingResult *mappingResult))success
      failure:(void (^)(RKObjectRequestOperation *operation, NSError *error))failure

我遇到来自服务器的错误,

NSLocalizedRecoverySuggestion="first_name":["This field may not be null."],"last_name":["This field may not be null."],"description":["This field may not be null."],"image":["This field may not be null."]

我认为 RestKit 将模型中的每个 nil 属性都映射为 null。我特别不想映射它们,所以服务器不会尝试更新任何空值。

我尝试使用

responseMapping.assignsDefaultValueForMissingAttributes = NO;

在映射中,但行为没有变化。

有什么方法可以告诉 RestKit 忽略而不映射任何为 nil 的属性?

PS:我尝试使用所有非空参数执行相同的调用,它更新模型完全没有问题。

【问题讨论】:

【参考方案1】:

您需要创建一个仅包含您要处理的键的特定映射。

assignsDefaultValueForMissingAttributes 用于设置缺失键的值。您所拥有的是已定义键的缺失值。因此assignsDefaultValueForMissingAttributes 不会为您做任何事情。

【讨论】:

以上是关于RestKit 更新对象映射空属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 映射空响应的对象

Restkit 对象映射给出空对象

RestKit 0.20:restkit 对象映射使属性映射加倍

RestKit - 实体映射属性转换

防止空 JSON 响应被映射 RestKit 0.22.0

RestKit:将嵌套数组映射到对象