将self.property传递给函数

问题描述:

我有get property的问题。当我将_videoRect传递给drawArea函数时,什么都不会发生。但是,如果我改变self.videoRect工作完美。将self.property传递给函数

我的代码:

@property (nonatomic, assign) BOOL isRecording; 
@property (nonatomic) NSValue* videoRect; 

@implementation Interactor 
@synthesize videoRect = _videoRect; 

- (id)init { 
    _isRecording = NO; 

    [self createVideoObserver]; 

    return self; 
} 

- (void)record { 

    _isRecording = !_isRecording; 

    if (!_isRecording) { 
     [self stop]; 
     [_presenter animateRecordButton:_isRecording]; 
    } else { 
     [self drawArea:&(_videoRect) completion:nil]; 
    } 

} 

- (void)drawArea:(NSValue* __strong *)rect completion:(void (^ __nullable)(void))completion { 
    if (!_isFullScreen) { 
     *rect = [NSValue valueWithRect:[self fullScreenRect]]; 
    } else { 
     [self drawScreenRect]; 
    } 

    if (completion != NULL) { 
     completion(); 
    } 
} 

setter和getter:

- (void)setVideoRect:(NSValue*)videoRect { 

    _videoRect = videoRect; 

} 

- (NSValue*)videoRect { 

    return _videoRect; 

} 

创建视频观察:

- (void)createVideoObserver { 

    [[RACObserve(self, videoRect) skip:1] subscribeNext:^(id _) { 

     [self start]; 

     [_presenter animateRecordButton:_isRecording]; 

    }]; 

} 

我不明白为什么观察者不起作用。我如何将self.videoRect传递给drawArea函数?

+0

也许这是[合成做什么](https) ://stackoverflow.com/questions/3266467/what-exactly-does-synthesize-do) – cwschmidt

您的-drawArea:completion:方法正在指向NSValue,而self.videoRectNSValue的属性。在Swift中,你可以通过引用来传递这样的属性,但在Objective-C中,属性实际上只不过是一对方法,其中一个方法设置了一个实例变量,另一个方法返回它。所以只需将该属性传递给该方法将不起作用。你需要做的是读取属性,传递一个指向结果值的指针,然后用新值修改属性:

NSValue *videoRect = self.videoRect; 
[self drawArea:&videoRect completion:^{ 
    ... 

    self.videoRect = videoRect; 
}];