iPhone子类化视图控制器和IBUITableView

iPhone子类化视图控制器和IBUITableView,iphone,ios,uitableview,uiviewcontroller,subclassing,Iphone,Ios,Uitableview,Uiviewcontroller,Subclassing,我有以下问题。我已经创建了一个与上面非常相似的ViewController @interface MyViewController : UIViewController { IBOutlet UITableView *myTableView; } @property (nonatomic, retain) IBOutlet UITableView *myTableView; 我已将Interface Builder上的myTableView链接到匹配nib的UITableView。我

我有以下问题。我已经创建了一个与上面非常相似的ViewController

@interface MyViewController : UIViewController {
    IBOutlet UITableView *myTableView;
}

@property (nonatomic, retain) IBOutlet UITableView *myTableView;
我已将Interface Builder上的myTableView链接到匹配nib的UITableView。我对MyViewController进行了子类化,以创建您的ViewController,如下所示:

@interface YourViewController : MyViewController {

}
然后我从tabbar控制器加载选项卡项上的YourViewController。虽然我可以看到MyViewController确实在最后被调用,但仿真器上没有显示任何表视图

我试着调试MyViewController,结果发现IBOutlet的值为零


为什么会这样?

我在继承、IBOutlets和IBAction方面遇到了一些重大问题。我建议你避免这样做,用另一种方式创建共享内容


例如,当我收到内存警告时,我受到了错误的严重打击。当在基类和派生类中定义出口和操作时,它们没有正确地重新连接。

我遇到了继承、IBOutlets和IBAction的主要问题。我建议你避免这样做,用另一种方式创建共享内容


例如,当我收到内存警告时,我受到了错误的严重打击。在基类和派生类中定义出口和操作时,它们没有正确地重新连接。

可能根本没有加载MyViewController的nib文件。您是否为ViewController使用特定的nib文件?您以何种方式创建ViewController

您是否也可以尝试在ViewController中定义一个“awakeFromNib”方法,然后从中调用[super awakeFromNib]


但是,为了理解您的问题,您必须清楚地解释如何加载对象以及是否以及在何处使用nib?

可能根本没有加载MyViewController的nib文件。您是否为ViewController使用特定的nib文件?您以何种方式创建ViewController

您是否也可以尝试在ViewController中定义一个“awakeFromNib”方法,然后从中调用[super awakeFromNib]


然而,为了理解您的问题,您必须清楚地解释如何加载对象以及是否以及在何处使用NIB?

如果您使用代码动态添加NIB,那么只有它才能工作。不使用Nib。

如果使用代码动态添加它,那么只有它才能工作。不使用Nib。

UITableView(即您的myTableView)需要数据源及其控制的委托。 控制器需要一个指向xib中表视图的链接

  • 在控制器的接口部分声明表委托协议

  • 使用IB,将xib中的TableView链接到所有者文件:委托

  • 使用IB,将文件所有者myTableView链接到xib中的tableView


  • 我希望它能有所帮助。

    UITableView(即myTableView)需要委托人来管理数据源及其控制。 控制器需要一个指向xib中表视图的链接

  • 在控制器的接口部分声明表委托协议

  • 使用IB,将xib中的TableView链接到所有者文件:委托

  • 使用IB,将文件所有者myTableView链接到xib中的tableView


  • 我希望它会有所帮助。

    假设您在MainWindow.xib中有整个导航堆栈

    • 打开MainWindow.xib
    • 选择您的ViewController(或调用子类化UITableViewController的任何控制器)
    • 选择属性检查器
    • 确保“NIB名称”属性选择了正确的YourViewController(或任何名称)

    我遇到了完全相同的问题,这为我解决了。

    假设您的整个导航堆栈都在MainWindow.xib中

    • 打开MainWindow.xib
    • 选择您的ViewController(或调用子类化UITableViewController的任何控制器)
    • 选择属性检查器
    • 确保“NIB名称”属性选择了正确的YourViewController(或任何名称)

    我遇到了完全相同的问题,这为我解决了它。

    您对如何实现这一点有什么建议吗?我的所有子类都在做与MyViewController完全相同的事情,唯一改变的是在每个子类上检索数据的方式。我觉得is与initCoder有关:这应该是一个标准的子类场景……好吧,我会将所有繁重的工作保留在基类中,并且尽可能只在派生类中有出口和操作。您对如何实现这一点有什么建议吗?我的所有子类都在做与MyViewController完全相同的事情,唯一改变的是在每个子类上检索数据的方式。我有一种感觉,这与initCoder有关:这应该是一个标准的子类场景……好吧,我会将所有繁重的工作保留在基类中,并且尽可能只在派生类中有出口和操作。我认为您在这里走的是对的。YourViewController正在通过nib加载。(它被指定为选项卡栏项目的NIB)如果我使用initWithNibName加载YourViewController,它可以正常显示MyViewController的NIB。但是,当从TabBar Nib加载时,它不会显示任何内容。我已经按照你的建议从笔尖上醒来了,但还是没有反应1.我认为你在这方面做得对。YourViewController正在通过nib加载。(它被指定为选项卡栏项目的NIB)如果我使用initWithNibName加载YourViewController,它可以正常显示MyViewController的NIB。但是,当从TabBar Nib加载时,它不会显示任何内容。我已经试着按照你的建议从笔尖上唤醒,但是仍然没有任何结果。没有办法通过笔尖加载它吗?即使我们用编码器覆盖initWithCoder:比方说?所以我尝试过用重载initWithCoder来调用initWithNibName,它确实可以工作,尽管现在看起来它有一个问题