我是
IOS和Objective-C以及整个MVC范例的新手,我坚持以下内容.
我正在研究(副本)联系人应用程序,也可以在iphone中作为内置应用程序.我想通过另一个视图控制器传递数据,数据传递(null):(.
解决方法
由于您获得的答案最多,在一个控制器和另一个控制器之间传递数据只是意味着将变量从一个控制器分配给另一个控制器.
如果您有一个控制器列出您的联系人而另一个控制器显示联系人详细信息并且流程从列表开始并在选择联系人后转到详细信息,您可以分配联系人变量(可能是数组中的对象)显示在列表中,并在显示此视图之前将其分配给详细视图控制器.
如果您有一个控制器列出您的联系人而另一个控制器显示联系人详细信息并且流程从列表开始并在选择联系人后转到详细信息,您可以分配联系人变量(可能是数组中的对象)显示在列表中,并在显示此视图之前将其分配给详细视图控制器.
- (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