ViewController类在创建视图时创建新实例,但它应该使用现有实例

时间:2012-10-02 01:46:28

标签: ios xcode cocoa-touch

我正在一个名为ResourcesTableViewController的类中创建一个TableViewController。我正在创建这个类:

ViewController.h:

@interface ViewController : UIViewController {
    ResourcesTableViewController *resourceTableViewController;

ViewController.m:

resourceTableViewController = [[ResourcesTableViewController alloc] initWithStyle:UITableViewStylePlain];
[resourceTableViewController setTableViewObject:localObject];

现在我可以使用它,我可以打电话

NSLog(@"%@ %@",resourceTableViewController,[resourceTableViewController tableViewObject]);

在我的ViewController.m中的几个部分使用(如预期的那样)相同的输出

<ResourcesTableViewController: 0x749f1c0> tableViewObjectContent

。为了打开我在故事板中创建的新TableView,一个带有popover到新视图的按钮(作为触发的segue)。但是只要按下按钮并显示视图,它就会创建一个新实例。奇怪的是我放入了我的类ResourcesTableViewController的viewDidLoad:

NSLog(@"viewDidLoad: %@: %@", self, self.tableViewObject);

它正在返回

<ResourcesTableViewController: 0x74bbcd0>: (null)

。另一个内存地址,另一个实例。不是我之前使用过的实例,也不是我给tableViewOject的实例。 如何从属于我创建和使用的resourceTableViewController的实例调用视图?我仍然可以通过与对象resourceTableViewController进行通信来访问该“旧”实例,但是创建的视图是该类型中的另一个,当然不能从我给第一个的对象中使用它。

1 个答案:

答案 0 :(得分:0)

如何显示表格视图取决于您希望如何显示它,以及此前屏幕上的内容。通常,您将使用segue从当前控制器(您按钮所在的控制器)转换到表视图。为此,您可以使用performSegueWithIdentifier:sender:其中identifier参数是您在IB中为segue指定的名称。但是你可以通过控制从一个视图中的按钮拖动到表视图控制器的视图并选择segue类型的模态来完成没有任何代码 - 然后,单击按钮将导致该表视图出现在屏幕上

如果您正在使用故事板,则不应在代码中分配init它 - segue会为您实例化新的视图控制器。