我几乎没有关于Objective-C的知识。我正在使用一个用于AVCaptureSession的Obj-C框架。我需要访问摄像机会话的AVCaptureVideoDataOutput。
在.m文件中初始化并设置会话。
@property (nonatomic, strong) AVCaptureSession *session;
我无法将属性从.m移动到.h文件,因为.m文件需要它来设置所有函数。
我也尝试在.m和.h中分别对它们进行readwrite / readonly以避免重新声明问题,但是当我在启动摄像机后调用camera.session时,“session”返回nil并且应用程序崩溃。
我不知道将所有代码移动到.h文件中是否会出现任何问题,因此它们都可公开访问?
如何从View Controller中的.m文件访问会话属性?
答案 0 :(得分:2)
将财产移至.h
。公开公开并将其提供给.m
,因为.m
文件默认导入.h
。
例如:
// CameraViewController.h
@interface CameraViewController : UIViewController
@property (nonatomic, strong) AVCaptureSession *session;
@end
// CameraViewController.m
#import "CameraViewController.h" // <- notice the import, `session` is accessible internally.
至于session
属性为nil,可能是因为你还没有用值初始化它。在init
中,您可能希望使用session
[[AVCaptureSession alloc] init]
注意:为了避免意外可变性的潜在问题,我建议您自问是否可以公开曝光的属性只读。
@property (nonatomic, strong, readonly) AVCaptureSession *session;
答案 1 :(得分:1)
如果将它移动到.h,.m也可以访问它。您甚至可以在标题中将其设置为只读,并在m
中进行读写所以要么:
·H:
@property (nonatomic, strong) AVCaptureSession *session;
或者:
·H:
@property (nonatomic, strong, readonly) AVCaptureSession *session;
的.m:
@property (nonatomic, strong, readwrite) AVCaptureSession *session;