如何观察 RestKit 中是不是存在字段。值为 null 时不调用 Setter

Posted

技术标签:

【中文标题】如何观察 RestKit 中是不是存在字段。值为 null 时不调用 Setter【英文标题】:How to observe if a field is there in RestKit. Setter is not invoked when the value is null如何观察 RestKit 中是否存在字段。值为 null 时不调用 Setter 【发布时间】:2014-02-18 11:10:57 【问题描述】:

我的应用中有一个通知机制。基本上,我有一个随每个响应一起发送的字段,并且当该字段的值发生变化时我会发布通知。有没有办法可以知道什么时候该字段根本没有发送?

现在该字段需要在那里,以便在RestKit 进行映射时调用我的setter,我可以发布通知。但是最好不要在不需要时发送此字段,并且我收到该字段消失的回调。

以下是说明问题的简化代码:

@interface MyClass : NSObject

@property (nonatomic, strong) NSNumber *myPreciousNumber;

+ (RKObjectMapping *)mappingForClass;

@end



@implementation MyClass


+ (RKObjectMapping *)mappingForClass

    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[self class]];

    [mapping addAttributeMappingsFromDictionary:@
     
         @"myPreciousNumber" : @"myPreciousNumber"
     ];

     return mapping;



- (void)setMyPreciousNumber:(NSNumber *)myPreciousNumber

    _myPreciousNumber = myPreciousNumber;

    // Post a value changed notification here.

显然,当响应中没有字段 send 时,不会调用 setter。字段值为空时也不调用。

我想知道是否有一种方法可以在发送的值为 null 时调用 setter,或者是否有另一种方法可以知道该字段何时不存在。

【问题讨论】:

【参考方案1】:

您可以查看在映射上设置 setDefaultValueForMissingAttributes,但这可能会导致您不想要的副作用。

无论如何,KVO 将是比您自己的通知更好的解决方案 (addObserver:forKeyPath:options:context:)。

您确实需要更清楚地了解您的通知解决方案的原因,因为它 99% 不是正确的方法。当您似乎想要更广泛的对象级别更改通知时,从单个变量发布更改通知表明您的更改通知在 RestKit success 回调块中比在对象本身中处理得更好。

【讨论】:

setDefaultValueForMissingAttributes 设置为YES 无效。但是,感谢指出我正确的方向。我将通知逻辑移至我的通用成功处理程序。现在干净多了。

以上是关于如何观察 RestKit 中是不是存在字段。值为 null 时不调用 Setter的主要内容,如果未能解决你的问题,请参考以下文章

Mysql如果某个字段值存在则更新另一个字段的值为原值+100,命令应该如何写?

oracle判断表是不是存在字段

如何在 Objective C 中使用 RestKit 将纬度和经度字段映射到单个 CLLocationCoordinate2D?

Restkit:将请求中的字段包含到对象映射中

检查restkit连接是不是!= nil

通过 RestKit 形成多部分请求