当您没有使用Nib文件时初始化ViewController

时间:2015-05-28 19:29:31

标签: swift storyboard

我正在将一个用于使用nib文件的项目转换为我正在使用Storyboard的项目。该应用程序有一个主屏幕(HomeVC),加载到导航控制器。当应用程序启动时,它会启动一个数据处理程序,从多个源中提取rss数据并将它们存储在CoreData中。在HomeVC中,我实例化堆栈中的下一个视图(FeedVC),这样当数据处理程序完成下载源时,我可以在其上调用reloadData()方法。为了实例化FeedVC,我在HomeVC中设置数据处理程序时编写了以下代码。

// This initializes the Feed VC for use later in the VC
    FeedViewController *view = [[FeedViewController alloc] initWithNibName: @"FeedViewController" bundle: nil];
    self.feedViewController = view;

当数据处理程序完成后,我使用以下代码重新加载表视图。

[self.feedViewController.feedsTableView reloadData];

这很好用。

新项目是用Swift编写的,正如我所提到的那样是使用Storyboard。我的问题是,当我打电话

self.feedViewController!.feedsTableView.reloadData()

编译器告诉我它是零。这是可以理解的,因为我不再有用于实例化视图的笔尖。当我使用Storyboard而不是nib文件时,如何实例化FeedVC?

尝试解决方案

这是我命名VC的地方。

enter image description here

以下是我在设置数据处理程序的方法中输入的代码。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("FeedViewController") as! FeedViewController
        self.feedViewController = vc

这是我的故事板名称。

enter image description here

问题可能是feedTableView而不是feedViewController。我在FeedViewController中将feedTableView声明为一个选项。

@IBOutlet weak var feedsTableView: UITableView!

小心,

乔恩

1 个答案:

答案 0 :(得分:1)

首先,您必须使用Interface Builder在Identity Inspector中设置 Storyboard ID

enter image description here

然后,您可以在任何想要实例化let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("nameOfYouPut") as! FeedViewController 的地方调用以下代码:

Dim LastRow as Integer, LastCol as Integer, Count as Integer
LastRow = 100
LastCol = 100
Count = 1
For i = 2 to LastRow
    For t = 2 to LastCol step 2
        Cells(i,t).Value = Count
        Count = Count + 1
    Next t
    Count = 1
Next i

我希望这对你有所帮助。