所以我有一个视图控制器FavoritesViewController,我有一个该视图控制器的实例:
FavoritesViewController *FVC=[[FavoritesViewController alloc]init];
如果我有两个其他视图控制器,HomeViewController和SettingsViewController我如何拥有它,以便我可以从两个视图控制器推送到一个特定的实例“FVC”。我想真正的问题是我如何/在哪里初始化该实例“FVC”,以便它被两个视图控制器识别,并且不在HomeViewController或SettingsViewController中初始化它。
由于
答案 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;
}