2014-11-28 2 views
0

안녕하세요 여러분, 저는 IOS 개발에 익숙하지 않고 블록 기능을 연구하고 있습니다. 그들의 작업에 대해 혼란스러워하고 있습니다. 제 질문은 블록 기능의 매개 변수를 블록 외부에 인쇄 할 수 있습니까? 다음과 같이 내 코드가ios의 블록 기능

[messageRenderingOperation start:^(NSString * plainTextBodyString, NSError * error) { 
     NSLog(@"plain text:%@",plainTextBodyString); 
     }]; 
NSLog(@"plain text body:%@",plainTextBodyString); 

내 출력 IDS 같다 : -

일반 텍스트 : 안녕하세요 세계
일반 텍스트 본문 : (null)와

이 값이 널 왜

. 도와주세요.

답변

1

블록

__block NSString *plainTextString; 

[messageRenderingOperation start:^(NSString * plainTextBodyString, NSError * error) { 
     //assign value 
     plainTextString =plainTextBodyString; 
     NSLog(@"plain text:%@",plainTextBodyString); 
     }]; 

//now you can access variable 
NSLog(@"plain text body:%@",plainTextString); 

또는

__block NSString *plainTextString; 
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 
    [messageRenderingOperation start:^(NSString * plainTextBodyString, NSError * error) { 
    //assign value 
    plainTextString =plainTextBodyString; 
    NSLog(@"plain text:%@",plainTextBodyString); 
dispatch_semaphore_signal(semaphore); }]; 
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 
//now you can access variable 
    NSLog(@"plain text body:%@",plainTextString); 

은 자세한 내용은 회신 https://developer.apple.com/library/mac/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html

+0

덕분에이 튜토리얼을 참조하시기 바랍니다 밖에서 하나 개의 변수를 선언하지만 me..still 작동하지 않습니다 null 값을 얻고 있습니다 .. –

+0

NSLog에서 블록 변수를 인쇄합니다. 즉, plainTextString이 아닌 plainTextBodyString입니다. – Vaibhav

+0

괜찮습니다. 블록에있는 코드 k는 비동기 적으로 실행됩니다. 따라서 블록의 코드가 블록의 코드가 실행되기 전 (또는 적어도 확실하게 완료되면) 실행됩니다. dispatch_sync는 기존의 뮤텍스 잠금과 의미 상 동일합니다. so dispatch_sync (대기열,^{ // 공유 리소스에 액세스 }); – Vaibhav