2014-10-17 4 views
-1

내 응용 프로그램의 연결을 확인하는 다음 코드가 있습니다. 연결 상태가 변경 될 때 슬라이드하는 사용자 지정 UIView에있는 UILabel에 연결 상태를 표시하려고합니다.외부 변수 값을 사용하는 방법은 무엇입니까?

[편집]

__block NSString * strConnectivityStatus = @""; 

[[AFNetworkReachabilityManager sharedManager] startMonitoring]; 

[END 편집]

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); 

    strConnectivityStatus = AFStringFromNetworkReachabilityStatus(status); 

    switch (status) { 
     case AFNetworkReachabilityStatusReachableViaWWAN: 
      viewConnectivityStatus.hidden = false; 
      lblConnectivityStatus.text = AFStringFromNetworkReachabilityStatus(status); 
     case AFNetworkReachabilityStatusReachableViaWiFi: 
      viewConnectivityStatus.hidden = false; 
      lblConnectivityStatus.text = AFStringFromNetworkReachabilityStatus(status); 
      break; 
     case AFNetworkReachabilityStatusNotReachable: 
      viewConnectivityStatus.hidden = false; 
      lblConnectivityStatus.text = AFStringFromNetworkReachabilityStatus(status); 
     default: 
      viewConnectivityStatus.hidden = false; 
      lblConnectivityStatus.text = AFStringFromNetworkReachabilityStatus(status); 
      break; 
    } 

}]; 

다음 나는 위치에 슬라이드 내 사용자 지정 UIView의 호출

OLSlidingMessageVC *msgConnectivityVC = [[OLSlidingMessageVC alloc] initWithTitleAndPosition:@"STATUS" message:strConnectivityStatus msgHeight:&viewHeight msgWidth:&viewWidth msgXPos:&viewXPos msgYPos:&viewYPos]; 

하지만 strConnectivityStatus은 항상 비어를 내가 블록 밖에서 그 값에 접근 할 수 없기 때문이다.

내 UIView에서 UILabel에 상태가 표시되게하려면 어떻게해야합니까?

+0

strConnectivityStatus에 __block 수정자를 사용하십시오. – gagarwal

+0

@ gagarwal 변수의 정의에 이미 __block 수정자가 있었기 때문에이 게시물을 편집했습니다. 값이 설정된 블록 외부에서 내 코드의 다른 값을 사용하고 싶습니다. – motionpotion

+0

@ gagarwal : '__block'을 사용하면 블록이 비동기 적으로 호출된다는 문제가 있기 때문에 쓸모가 없습니다. – newacct

답변

0

그러면 블록이 동기식으로 호출되지 않으므로 strConnectivityStatus은 블록 외부의 아무 곳에서나 설정되지 않습니다.

블록 내 로컬 변수를 strConnectivityStatus으로 만들고 블록 내에서 필요한 모든 작업을 수행하십시오.

+0

블록 외부의 다른 값으로 설정된 값을 블록 외부에서 사용하고 싶습니다. – motionpotion

+1

@motionpotion : 알아. 그러나 블록이 실행되기 전에 "블록 외부"가 발생한다는 간단한 이유 때문에 불가능합니다. – newacct

관련 문제