Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 管理多个视图控制器和数据_Objective C_Iphone - Fatal编程技术网

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

Objective c 管理多个视图控制器和数据,objective-c,iphone,Objective C,Iphone,我的应用程序有一个主屏幕,用户总是从这个主屏幕开始,我想从中以编程方式显示其他视图。我设置应用程序的方法与第6章“开始iPhone开发”中的方法相同,即使用在其他视图控制器中加载的RootViewController 这本书使用一个按钮来触发加载下一个视图控制器,但在我的应用程序中,我需要在函数调用结束时交换控制器,并在视图之间共享数据(处理的UIImage等)。我没有使用选项卡栏或导航控制器 我想知道的是,我是否应该让我的主ViewController成为根控制器,并从那里成为PresentM

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

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


我想知道的是,我是否应该让我的主ViewController成为根控制器,并从那里成为PresentModalViewController?我希望保留根模型,但我不太明白如何将其连接起来并共享数据。我看到过一些帖子提到使用协议和通知,但我还没有完全意识到这一点。非常感谢您的建议。

您要做的是在主视图控制器中添加一个引用要与从属视图控制器共享的对象实例的视图控制器

例如,如果要共享
NSArray
,则在主视图控制器标题中指定其属性:

@interface MainViewController : UIViewController {
  NSArray *myArray;
}

@property (nonatomic, retain) NSArray *myArray;

@end
在实现中,添加
@synthesis
指令,并记住
-dealoc
中释放数组:

@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
,例如
[self.myArray objectAtIndex:index]
以获取给定索引处的对象。

您要做的是在主视图控制器中添加一个引用要与从属视图控制器共享的对象实例的控件

例如,如果要共享
NSArray
,则在主视图控制器标题中指定其属性:

@interface MainViewController : UIViewController {
  NSArray *myArray;
}

@property (nonatomic, retain) NSArray *myArray;

@end
在实现中,添加
@synthesis
指令,并记住
-dealoc
中释放数组:

@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
,例如
[self.myArray objectAtIndex:index]
,就可以在给定的索引处获取对象。

这就清楚了视图控制器之间如何共享数据,谢谢。我仍然不清楚(即使在阅读了苹果的文档之后)协议的使用。具体来说,如果您使用Xcode“实用程序应用程序”模板创建应用程序,则以下几行会让我感到困惑:@protocol FlipsideViewControllerDelegate@接口FlipsideViewController:UIViewController{id delegate;}我不明白为什么要设置此委托变量。它看起来像是在展示/取消反面视图时使用的。我没有读过第6章。你在帖子中提到过。但我可以猜一猜——最有可能的是,该代理的设置是为了让FlipsideViewController可以向其父级(即FlipsideViewController之前的视图控制器)发出信号,从而明确如何在视图控制器之间共享数据,谢谢。我仍然不清楚(即使在阅读了苹果的文档之后)协议的使用。具体来说,如果您使用Xcode“实用程序应用程序”模板创建应用程序,则以下几行会让我感到困惑:@protocol FlipsideViewControllerDelegate@接口FlipsideViewController:UIViewController{id delegate;}我不明白为什么要设置此委托变量。它看起来像是在展示/取消反面视图时使用的。我没有读过第6章。你在帖子中提到过。但我可以猜一猜——最有可能的是,该委托被设置为FlipsideViewController可以向其父对象发出信号(即FlipsideViewController之前的视图控制器)