2012-04-21 96 views
1

从modalViewController(CollegesViewController *),我试图设置一个变量在rootViewController没有运气。在我的tableview:didSelectRowAtIndexPath方法:方法我用下面的代码来设置RootViewController的(MapsViewController *)selectedIndex属性:ModalViewController保留价值

MapsViewController *mapsView = (MapsViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"MapsView"]; 
mapsView.selectedIndex = [NSNumber numberWithInt:indexPath.row]; 

[self dismissModalViewControllerAnimated:YES]; 

当我打印self.selectedIndex中的MapViewController值总是0,这是不所选值。

在此先感谢您的帮助。

+0

Hampus有正确的答案,但我认为你也只是创建一个新的MapsViewController并设置一个值。你实际上从来没有对mapsView做过任何事情,它会在方法结束时超出范围。如果你的父母是一个MapsViewController,那么无论如何这都不会给你那个特定的实例。 – atticus 2012-04-21 20:50:54

回答

2

正确的方法是为CitiesViewController创建一个委托协议。

@protocol UniversitiesViewControllerDelegate <NSObject> 
- (void)universitiesViewController:(UniversitiesViewController *)uvc selectedIndex:(NSInteger)index; 
@end 

并添加

@property (weak, nonatomic) id <UniversitiesViewControllerDelegate> delegate; 

到UniversitiesViewController类。

在didSelectRow在UniversitiesViewController,从MapsViewController,实例化时UniversitiesViewController(或者如果使用塞格斯,在prepareForSegue)设置委托给 '自我' 调用

[self.delegate universitiesViewController:self selectedIndex:indexPath.row] 

然后。并使MapsViewController处理委托方法。

- (void)universitiesViewController:(UniversitiesViewController *)uvc selectedIndex:(NSInteger)index 
{ 
    // do stuff 
} 
+0

谢谢!我试图查看是否有任何故事板方法会使它更容易。可能不会。 – Jack 2012-04-21 20:58:21