3

NSManagedObjectを呼び出す場合、非設定/取得メソッドで使用する場合、ステートメントでsetPrimitiveValueラップする必要がありますか?{will|did}ChangeValueForKey

たとえば、キー (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 に答える