Я знаю, что в документации Apple dev есть много вопросов о делегатах, а также о других моих книгах и в таких ресурсах, как stackoverflow и другие. Но я все еще не понимаю.Как использовать делегат для передачи данных назад/вверх по цепочке контроллеров в Obj-C/Cocoa
Недавно я наблюдал за лекцией о контроллерах навигации и т. Д. В серии Stanford CS193P Winter 2010, и в этой лекции они рассказывают о передаче данных вперед на стеке контроллеров представлений, что очень просто. Но они коротко отметили, что вы идеально использовали делегат/протокол для передачи данных «назад» (например, от контроллера детального представления до контроллера списка), но они не делали демонстрационный или пост-образец кода.
Я читал и искал образец этого точного сценария, поэтому я могу обернуть голову вокруг использования делегата/протокола, но не могу его найти. Вот какой-то псевдокод, с которым я играю. Должна ли она передавать данные «назад»?
myListController : UIViewController <SetDataInParent> {
// when pushing detail controller onto stack,
// set DetailController delegate = self
}
myDetailController : UIViewController {
//header file
@protocol SetDataInParent <NSObject>
- (void)willSetValue:(*NSString);
@end
@interface myDetailController {
id <SetDataInParent> delegate;
}
@end
// class/m file
@implementation
@synthesize delegate;
- (void)willSetValue:(*NSString) {
// code here that would take argument
// from detail controller and set
// a value or text field to that
// argument in list controller
}
// send message to list controller class
- [delegate willSetValue:string];
@end
}
Возможно, я неправильно понял ваш комментарий, fbrerto. Таким образом, я нахожусь на правильном пути с моим psuedo-кодом для myListController в том, что «список» подталкивает «деталь» к стеку, а затем делегирует делегат детали «в список»? И я поставил свой @protocol SetDataInParent в неправильном месте? – Gregir 2010-12-16 21:35:30