2017-03-24 13 views
0

나는 first class에서 선언되고 유지 된 두 번째 클래스에서 블록을 호출하고있다. 보기 Controller.m에서 ViewController.h다른 클래스에서 속성으로 정의 된 블록을 호출하는 방법은 무엇입니까?

@property (copy) void (^simpleBlock)(NSString*); 

에서

- (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 

좀 solutio을 제안하십시오 왜냐하면 코드가 나쁜 실행 오류를주고 있기 때문입니다. 다른 방법으로 블록을 호출하려면 어떻게해야합니까?

답변

1

블록을 실행하는 올바른 방법입니다. 당신은 블록을 실행하려고하는 경우에는 nil 당신은 충돌이있을 것이다 - 그래서 당신은 항상 호출하기 전에이 nil 아니라고 확인해야합니다 :

ViewController *vc = [[ViewController alloc] init]; 
if (vc.simpleClock) { 
    vc.simpleBlock(@"Harjot");//this will not get called 
} 

이유를 귀하의 경우 블록이 nil가 있기 때문입니다 이유 viewDidLoad에 설정합니다. 그러나 viewDidLoad은보기가 화면에 표시 될 때까지 호출되지 않습니다. 테스트를 위해 목적 initviewDidLoad에서 할당을 이동하려고이 작동합니다 :

- (instancetype)init 
{ 
    self [super init]; 
    if (self) { 
     _simpleBlock = ^(NSString *str) 
     { 
      NSLog(@"Hello My Name is: %@",str); 
     }; 
    } 
    return self; 
} 
+0

덕분에 마법처럼 작동합니다 ...! –