Как и большинство ответов, которые вы получили, передача данных между одним контроллером и другим просто означает присвоение переменной от одного контроллера другому.
Если у вас есть один контроллер для вывода списка контактов, а другой - для отображения сведений о контакте, а процесс начинается со списка и идет подробно после выбора контакта, вы можете назначить переменную контакта (это может быть объект из массива, который отображается в вашем списке) и назначьте его контроллеру подробного вида непосредственно перед его отображением.
- (void)goToDetailViewControllerForContact:(Contact *)c
{
ContactDetailViewController *detailVC = [[[ContactDetailViewController alloc] init] autorelease];
detailVC.contact = c;
[self.navigationController pushViewController:c animated:YES];
//[self presentModalViewController:detailVC animated:YES]; //in case you don't have a navigation controller
}
С другой стороны, если вы хотите вставить новый контакт из подробного контроллера в контроллер списка, я думаю, что наилучшим подходом было бы назначить контроллер списка в качестве делегата подробного, поэтому, когда контакт добавил, что делегат уведомлен и действует как ожидается (вставьте контакт в массив и перезагрузите представление таблицы?).
@protocol ContactDelegate <NSObject>
- (void)contactWasCreated:(Contact *)c;
// - (void)contactWasDeleted:(Contact *)c; //may be useful too...
@end
@interface ContactListViewController : UIViewController <ContactDelegate>
@property (nonatomic, retain) NSArray *contacts;
...
@end
@implementation ContactListViewController
@synthesize contacts;
...
- (void)goToDetailViewControllerForContact:(Contact *)c
{
ContactDetailViewController *detailVC = [[[ContactDetailViewController alloc] init] autorelease];
detailVC.contact = c;
detailVC.delegate = self;
[self.navigationController pushViewController:c animated:YES];
//[self presentModalViewController:detailVC animated:YES]; //in case you don't have a navigation controller
}
- (void)contactWasCreated:(Contact *)c
{
self.contacts = [self.contacts arrayByAddingObject:c]; //I'm not sure this is the correct method signature...
[self reloadContacts]; //may be [self.tableView reloadData];
}
...
@end
@interface ContactDetailViewController : UIViewController
@property (nonatomic, assign) id<ContactDelegate> delegate;
...
@end
@implementation ContactDetailViewController
@synthesize delegate; //remember to don't release it on dealloc as it is an assigned property
...
- (void)createContactAction
{
Contact *c = [[[Contact alloc] init] autorelease];
[c configure];
[self.delegate contactWasCreated:c];
}
...
@end