如何在另一个 class 中调用定义为 属性 的块?
How to call block defined as property in another class?
我正在调用第二个 class 中的块,该块已在第一个 class 中声明和维护。
在ViewController.h
@property (copy) void (^simpleBlock)(NSString*);
在视图中Controller.m
- (void)viewDidLoad {
[super viewDidLoad];
self.simpleBlock = ^(NSString *str)
{
NSLog(@"Hello My Name is: %@",str);
};
}
在第二视图中Controller.m
在 ViewDidload 中
ViewController *VC = [[ViewController alloc]init];
VC.simpleBlock(@"Harjot");//bad execution error
请给我一些解决方案,因为代码给我错误的执行。
我怎样才能以任何其他方式调用该块?
这是运行方块的正确方式。但是,如果您尝试 运行 一个 nil
的块,您将遇到崩溃 - 因此在调用它之前,您应该始终检查它是否不是 nil
:
ViewController *vc = [[ViewController alloc] init];
if (vc.simpleClock) {
vc.simpleBlock(@"Harjot");//this will not get called
}
在您的情况下,块是 nil
的原因是因为您在 viewDidLoad
中设置了它 - 但是 viewDidLoad
在其视图准备好显示在屏幕上之前不会被调用。出于测试目的,尝试将作业从 viewDidLoad
移至 init
,这应该有效:
- (instancetype)init
{
self [super init];
if (self) {
_simpleBlock = ^(NSString *str)
{
NSLog(@"Hello My Name is: %@",str);
};
}
return self;
}
我正在调用第二个 class 中的块,该块已在第一个 class 中声明和维护。
在ViewController.h
@property (copy) void (^simpleBlock)(NSString*);
在视图中Controller.m
- (void)viewDidLoad {
[super viewDidLoad];
self.simpleBlock = ^(NSString *str)
{
NSLog(@"Hello My Name is: %@",str);
};
}
在第二视图中Controller.m
在 ViewDidload 中
ViewController *VC = [[ViewController alloc]init];
VC.simpleBlock(@"Harjot");//bad execution error
请给我一些解决方案,因为代码给我错误的执行。 我怎样才能以任何其他方式调用该块?
这是运行方块的正确方式。但是,如果您尝试 运行 一个 nil
的块,您将遇到崩溃 - 因此在调用它之前,您应该始终检查它是否不是 nil
:
ViewController *vc = [[ViewController alloc] init];
if (vc.simpleClock) {
vc.simpleBlock(@"Harjot");//this will not get called
}
在您的情况下,块是 nil
的原因是因为您在 viewDidLoad
中设置了它 - 但是 viewDidLoad
在其视图准备好显示在屏幕上之前不会被调用。出于测试目的,尝试将作业从 viewDidLoad
移至 init
,这应该有效:
- (instancetype)init
{
self [super init];
if (self) {
_simpleBlock = ^(NSString *str)
{
NSLog(@"Hello My Name is: %@",str);
};
}
return self;
}