4

KVO を使用してオブジェクトのプロパティを監視し、そのオブザーバーの部分モックを作成するオブジェクトがある場合、通知を受け取りません。どうしてこれなの?

最小限の例を次に示します。

@interface TestPartialMockAndKVO : SenTestCase
@end
@implementation TestPartialMockAndKVO

- (void)test {
    // Should print "Changed!" when foo property is changed
    MyObserver* myObserver = [[[MyObserver alloc] init] autorelease];

    // But with this line, there is no print out
    [OCMockObject partialMockForObject:myObserver];

    [myObserver setFoo:@"change"];
}

@end

-

@interface MyObserver : NSObject    
@property (copy) NSString* foo;
@end
@implementation MyObserver

- (id)init {
    self = [super init];
    [self addObserver:self forKeyPath:@"foo" options:0 context:NULL];
    return self;
}

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {
    NSLog(@"Changed!");
}

- (void)dealloc { ... }    
@end
4

1 に答える 1