- 即使从故障中实现对象,[NSManagedObject faultingState]也会返回0

时间:2015-02-01 19:39:16

标签: cocoa core-data key-value-observing

我正在使用managedObject的faultingState属性来查看对象在接收KVO通知时是否处于过渡状态。

NFSDealer *dealer = user.dealers[0];
Asset *asset = finance.asset;

正在讨论的对象是财务,这是一个错误。当我获得资产属性时,故障被触发并且财务被初始化。在此过程中,我收到了KVO财务变更通知。但是,这些通知中的财务状况正在返回0。这是正确的行为,还是我做错了什么?

这是观察代码。我正在使用FBKVOController进行自定义操作。

- (void)didChangeDepositAmount:(NSDictionary *)change object:(Finance *)observedObject{

if (observedObject.faultingState != 0) {

    return;

}

if ([change[NSKeyValueChangeOldKey] doubleValue] == [change[NSKeyValueChangeNewKey] doubleValue]) {

    return; // a hack around the faultingState :(

}

double newValue = [change[NSKeyValueChangeNewKey] doubleValue];

_depositDataSource.object = @(newValue);}

此外,如果我将对象变为错误,我仍然会收到这些通知,但在这些通知中,faultingState会返回2,这是有意义的。但是当故障被实现时,faultingStatus在通知中返回0。这是代码

[finance.managedObjectContext refreshObject:finance mergeChanges:NO];
Asset *faultedAsset = finance.asset;

以下是faultingState

的文档
@property(nonatomic, readonly) NSUInteger faultingState
  

如果对象完全初始化为托管对象且未转换到其他状态或从其他状态转换,则为<0>,否则为其他值。此属性允许您在接收键值观察更改通知时确定对象是否处于过渡阶段。

是否想知道是否由于故障被实现为初始化对象而触发了通知?

0 个答案:

没有答案