如何观察 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,命令应该如何写?
如何在 Objective C 中使用 RestKit 将纬度和经度字段映射到单个 CLLocationCoordinate2D?