2016-09-22 3 views
0

Я пытался передать данные с использованием блоковпередавать данные с помощью блоков вместо делегата

отправлены данные назад

объявляют блок в вашем secondViewController .h файл

@property (nonatomic, copy)void(^myBlock)(NSString *); 

вызова блок, где вам нужно передать данные из файла .m файла secondViewController

myBlock(@"this will displayed in firstViewController"); 

3.Import выше .h файла в файле .m firstViewController и определить свой блок как

secondViewController *ref =[[secondViewController alloc ]init]; 
ref.myBlock =^void(NSString *data) 
{ 
self.labelOffirstviewcontroller=data; 
}; 

во время запуска времени я получаю EXC Ошибка плохого доступа Можно ли сортировать вопрос к этому?

+0

вы должны определить замыкания в неправильном порядке. мы не определяем замыкание как свойство – Wolverine

+0

, тогда вы можете объяснить, как его определить? @Wolverine –

+0

typealias ClosureType = (ParameterTypes) -> (ReturnType) – Wolverine

ответ

0

Здесь [[secondViewController alloc ]init]; вы создаете новый экземпляр контроллера вида, чтобы вы могли установить на него блок, но затем он не используется и не уничтожается. Вам нужно использовать prepareForSegue или подобное в зависимости от того, как вы показываете VC, чтобы вы установили блок на правильный экземпляр.

VC2 должен, как правило, проверить, равен ли блок нулю, а затем вызвать его.

Собственность также должна быть сильной, а не копией. ARC делает все правильно.

0

Я нашел способ передачи данных.

secondViewController *ref =[[secondViewController alloc ]init]; 
ref.myBlock =^void(NSString *data) 
{ 
self.labelOffirstviewcontroller=data; 
}; 

этот код следует, где мы помещаем ViewController