我正在调用第二类中的块,它已在第一类声明和维护。
在ViewController.h中
@property (copy) void (^simpleBlock)(NSString*);
在View Controller.m中
- (void)viewDidLoad {
[super viewDidLoad];
self.simpleBlock = ^(NSString *str)
{
NSLog(@"Hello My Name is: %@",str);
};
}
在SecondViewController.m中
在ViewDidload中
ViewController *VC = [[ViewController alloc]init];
VC.simpleBlock(@"Harjot");//bad execution error
请给我一些解决方案,因为代码给我的执行错误。 我怎么能用其他方式调用块?
答案 0 :(得分:1)
运行块的正确方法。但是,如果您尝试运行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;
}