如何在另一个 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;
}