管理多个视图控制器和数据

时间:2009-09-18 22:46:38

标签: objective-c iphone

我的应用程序有一个主屏幕,用户始终从该屏幕开始,我想从中以编程方式显示其他视图。我将应用程序设置为与“开始iPhone开发”Ch中的方法完全相同。 6,这是使用在其他视图控制器中加载的RootViewController。

本书使用按钮来触发加载下一个视图控制器,但在我的应用程序中,我需要在函数调用结束时交换控制器并在视图之间共享数据(处理过的UIImages等)。我没有使用标签栏或导航控制器。

我想知道的是,我应该从那里使我的MainViewController成为根控制器和presentModalViewControllers吗?我想保留根模型,但我不太明白如何将它全部挂起并共享数据。我已经看过提及使用协议和通知的帖子,但我还没有解决它。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您要做的是在主视图控制器中添加一个Cocoa property,它引用您要与下级视图控制器共享的对象实例。

例如,如果我们要共享NSArray,我们在主视图控制器头中指定其属性:

@interface MainViewController : UIViewController {
  NSArray *myArray;
}

@property (nonatomic, retain) NSArray *myArray;

@end

在实施中,添加@synthesize指令,并记住release-dealloc数组的@implementation MainViewController @synthesize myArray; ... - (void) dealloc { [myArray release]; [super dealloc]; } @end

- (void) pushSubordinateViewController {
  SubordinateViewController *subVC = [[SubordinateViewController alloc] initWithNibName:@"SubordinateViewController" bundle:nil];
  subVC.myArray = self.myArray; // this sets the sub view controller's myArray property
  [self.navigationController pushViewController:subVC animated:YES];
  [subVC release];
}

您还希望以完全相同的方式添加此属性以查看从属于主视图控制器的控制器。在其标题中,指定相同的变量名称和属性说明。

在主视图控制器中,当您准备推送从属视图控制器时,在推送之前相应地设置从属视图控制器的属性:

self.myArray

同样在你的下级视图控制器中, it 需要相应地设置其下属的数组属性,就在它推送自己的子视图控制器之前。

通过以这种方式设置引用,每个视图控制器都指向同一个数组,包含所需的元素。

要使用该数组,只需拨打[self.myArray objectAtIndex:index],例如{{1}}获取给定索引处的对象。