2014-11-28 3 views
0

привет всем Я новичок в разработке IOS, и я работаю над блочными функциями. Я смущен их работой. Мой вопрос в том, можем ли мы напечатать параметры функции блока вне его блока. Мой код подобенФункция блока в ios

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

Мои выходные идентификаторами следующим образом: -

простой текст: привет мир
обычный текст тела: (нуль)

почему это значение равно нулю. Пожалуйста, помогите мне.

ответ

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 Я получаю нулевое значение. –

+0

Я печатаю переменную блока в NSLog ie plainTextString не plainTextBodyString – Vaibhav

+0

ok Я получил его, код в блоке k выполняется асинхронно. Таким образом, код после блока запускается до того, как код в блоке имел шанс запустить (или, конечно же, завершить хотя бы). dispatch_sync семантически эквивалентен традиционной блокировке мьютекса. поэтому используйте dispatch_sync (queue,^{ // доступ к общему ресурсу }); – Vaibhav

Смежные вопросы