【发布时间】:2013-06-29 00:58:23
【问题描述】:
为 IOS 6 制作 APP - 我有一个 mainViewController,当点击按钮时会显示一个新的 modalViewController。那个modalViewController 有一个tableView。当用户点击一个单元格时,我想获取该单元格的值并将其分配给 mainViewController 上的变量。
问题是我在 viewDidAppear 方法中输出时总是得到 NULL。
这是modalViewController中的委托方法:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableString *event_id = [[self.events valueForKey:@"event_id"] objectAtIndex:indexPath.row];
NSLog(@"EVENT ID = %@", event_id); //This gives me actuall ID
[self.presentingViewController dismissViewControllerAnimated:YES completion:^{
[self.mainViewController setEventID:event_id];
}];
}
如果你看到我使用完成块来设置它。在我的 mainViewController 中,我有一个 eventID 属性。在我的 modalViewController 我也有
@class MainViewController
@interface ModalViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>{
IBOutlet UITableView *eventsTable;
}
@property (strong, nonatomic) MainViewController *mainViewController;
@end
由于某种原因,当我尝试在 viewDidAppear 中输出它时,我得到的 eventID 总是 NULL,但是当我第一次设置它时它确实输出了它。我在那里错过了什么??
任何帮助将不胜感激。
编辑:
在我的 MainViewController 中,我已经设置了其他委托,如下所示:
@interface MainViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate, UIAlertViewDelegate, CLLocationManagerDelegate>
使用协议委托方法,我将如何在那里添加我的自定义委托声明,如 ModalViewControllerDelegate。
【问题讨论】:
-
为什么要在
-dismissViewControllerAnimated:completion:的完成块中设置事件ID,而不是在关闭视图之前设置?另外,您确定mainViewController实际上持有对主视图控制器的有效引用吗?是在-viewDidAppear之前还是之后调用完成块? -
我已经把它放在完成块中,因为我在关闭模式视图控制器之前尝试过设置它,但这也不起作用。它只是没有设置它。
标签: objective-c ios6 delegates modalviewcontroller