如何从应用程序委托、情节提要、iOS6 获取我的视图控制器的实例

Posted

技术标签:

【中文标题】如何从应用程序委托、情节提要、iOS6 获取我的视图控制器的实例【英文标题】:How to get an instance of my view controller from the app delegate, storyboards, iOS6 【发布时间】:2012-12-27 14:53:07 【问题描述】:

试图从应用程序委托中“实例化”我的初始视图控制器。我试图从应用程序委托中填充 NSMutableArray。视图控制器“myMutabelArray”的属性获取在应用程序委托中创建的数组。使用下面的代码,数组不受影响,即使它的计数是 4(有四个对象),正如在应用程序委托中创建的那样。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil];
ViewController *controller = (ViewController*)[mainStoryboard instantiateInitialViewController];
controller.myMutableArray = mutableArrayCreatedInAppDelegate;

当我从 AppDelegate 中记录计数时,我得到 4。 当我从 ViewController 中记录计数时,我得到 0

我还尝试了以下方法,这让我怀疑我没有根据需要获得指向视图控制器的指针。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil];
ViewController *controller = (ViewController*)[mainStoryboard instantiateInitialViewController];
[controller.view setBackgroundColor:[UIColor lightGrayColor]];

【问题讨论】:

【参考方案1】:

尝试以下方法:

ViewController *controller = (ViewController*)self.window.rootViewController;

它将返回主故事板的初始视图控制器。

【讨论】:

非常感谢。做到了!我的代码无法将数据传递给我的视图控制器是否有特殊原因? 不客气。 instantiateInitialViewController 方法创建初始视图控制器的一个新实例,它与屏幕上显示的不同。您应该使用此方法切换到主故事板以外的故事板。你可以阅读更多关于它的信息here。 知道了。也感谢您的链接。 现在它的 -- self.view.window.rootViewController 其中 self 是 UIViewController

以上是关于如何从应用程序委托、情节提要、iOS6 获取我的视图控制器的实例的主要内容,如果未能解决你的问题,请参考以下文章

从情节提要加载 UILabel,无法更改 cellForRowAtIndexPath 中的框架

使用委托将数据从模态视图传递到父视图(在情节提要中使用 segue)

您可以在应用程序/场景委托中设置窗口并仍然使用情节提要吗?

使用情节提要时如何在appDelegate中获取指向viewController的指针

如何从情节提要文件中获取现有的控制器对象?

如何在没有情节提要的情况下创建 ViewController 并将一个设置为另一个的委托?