如何从多个视图控制器推送到一个视图控制器对象

时间:2014-03-31 17:05:10

标签: ios objective-c uiviewcontroller

所以我有一个视图控制器FavoritesViewController,我有一个该视图控制器的实例:

FavoritesViewController *FVC=[[FavoritesViewController alloc]init];

如果我有两个其他视图控制器,HomeViewController和SettingsViewController我如何拥有它,以便我可以从两个视图控制器推送到一个特定的实例“FVC”。我想真正的问题是我如何/在哪里初始化该实例“FVC”,以便它被两个视图控制器识别,并且不在HomeViewController或SettingsViewController中初始化它。

由于

4 个答案:

答案 0 :(得分:2)

当你看MVC模式时,你应该真正关心共享的对象是模型,而不是控制器。你的问题告诉我,ViewController也可能是作为模型的责任。

如果这是真的,您可能想要创建另一个类(可能称为“收藏夹”),并按照之前的一些答案中的建议将其设为单例,如有必要。这样做,无论是使用故事板,xib还是代码,而不是使VC成为单例,也可以以相同的方式工作。

也许你有充分的理由需要分享VC本身,但我认为质疑这个前提是值得的。

答案 1 :(得分:1)

如果您想要在整个应用中共享收藏夹视图控制器的单个实例,请将其设为单个实例。在iOS上搜索单身设计模式的Google搜索。这个想法是你要添加一个类方法sharedFavoritesController,它总是返回相同的实例,并使用它。

类方法看起来像这样:

+(FavoritesViewController *) sharedFavoritesVC;
{
  static FavoritesViewController *_sharedFavoritesVC;
  if (! _sharedFavoritesVC)
    _sharedFavoritesVC = [[FavoritesViewController alloc] init;
  return _sharedFavoritesVC;
}

然后#import你的FavoritesViewController类的标题,并且只要你需要调用它,使用:

[FavoritesViewController sharedFavoritesVC]获取指向它的指针。

答案 2 :(得分:0)

您可以在该视图控制器周围包装单个模式。 或者,不那么优雅但更常见,在AppDelegate中实例化它并从那里获取它。

请注意,视图控制器的同一实例只能在视图控制器堆栈中出现一次。另外 - 原则上 - 拥有相同视图控制器类的多个实例没有任何问题。

编辑回复您的评论: 不是我推荐的,但是当您的应用委托类名为sharedFavoritesViewController时,这就是您获取属性FavoritesViewController(可能引用MyAppDelegate的实例)的方式:

FavoritesViewController localVar = [(MyAppDelegate)[[UIApplication sharedApplication] delegate] sharedFavoritesViewController];

答案 3 :(得分:0)

方式1:

声明

extern FavoritesViewController *FVC;

方式2:

如果这是你的rootViewController,那么在其他viewcontrollers中

FavoritesViewController *fvc=(FavoritesViewController*)appDelegateObj.rootViewController;

方式3:

使用单身人士

+(FavoritesViewController *) sharedInstance;
{
  static FavoritesViewController *SVC;
  if (! SVC)
    SVC = [[FavoritesViewController alloc] init;
  return SVC;
}