3

在 an 上NSManagedObject,如果我调用setPrimitiveValue,是否需要将其包装在{will|did}ChangeValueForKey语句中,如果它用于非设置/getter 方法?

例如,我想要一个方法,它接受一个键(NSString)并增加模型对象上的一个属性的值。

-(void) incrementItem:(NSString *)key
{
    NSNumber *value = [self primitiveValueForKey:key];
    int intValue = value.intValue;

    [self setPrimitiveValue:[NSNumber numberWithInt: intValue++] forKey:key];
}
4

1 回答 1

1

在访问原始值(或支持非托管对象的 ivar)时调用您的 KVO 方法应始终完成。因此,您的方法应如下所示:

-(void) incrementItem:(NSString *)key
{
    [self willAccessValueForKey:key];
    NSNumber *value = [self primitiveValueForKey:key];
    [self didAccessValueForKey:key];
    int intValue = value.intValue;

    [self willChangeValueForKey:key];
    [self setPrimitiveValue:[NSNumber numberWithInt: intValue++] forKey:key];
    [self didChangeValueForKey:key];
}
于 2013-01-17T17:31:55.830 回答