2012-04-21 121 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