我想实现我的MainContainerViewController类别返回主实例:实现一个UIViewController类
在我的.h:
@interface UIViewController(MainViewExtension)
/** Convience method for getting access to the MainContainerViewController instance */
- (MainContainerViewController *)mainContainerExtension;
@end
在我的.m
@implementation UIViewController(MainViewExtension)
- (MainContainerViewController *)mainContainerExtension
{
return (MainContainerViewController *)self;
}
@end
所以从一些外部视图控制器,我做self.mainContainerExtension来访问实例,并且只声明了一个实例,但它没有给我正确的实例。
NSLog(@"number of children:%i", [self.mainContainerExtension.childViewControllers count]);
这将返回0,即使它应该是3,所以这就是我知道它没有给我正确的结果。我错过了什么吗?
编辑:我知道这不会给我正确的实例的方式是因为在MainContainerViewController
的viewDidLoad
,我有这样的:
- (void)viewDidLoad
{
appDelegate.notesViewController=[[NotesViewController alloc] init];
appDelegate.notesViewController.mainContainer=self;
[self addChildViewController: appDelegate.notesViewController];
}
每个NotesViewController
有MainContainerViewController
类型的属性,从而使我总是有办法从NotesViewControllers
访问MainContainerViewController
。但是我刚刚了解了类别和扩展,并且我认为实现一个类别可以让我更方便地访问容器视图,而不是在每个视图控制器上都有属性。这是我第一次,所以我敢肯定,我在执行类别时做错了什么,只是不知道它是什么。
你想完成一个单身?你能否粘贴一些显示失败比较的代码?也就是说,ExpectedHandleToVC!= self.mainContainerExtension。比较或NSLog(@“%p”,self)是测试其工作是否更直接的方法。 – danh 2012-03-25 14:38:23
我对'NSLog(@%@“,self.mainContainerExtension)的输出是:''。不太确定这是什么意思,尽管 –
Snowman
2012-03-25 14:45:28
它是指向实例的指针。换句话说,是什么让你认为它是错的?典型的(非标签栏)UIViewController应该有0个childViewControllers。 – danh 2012-03-25 14:59:10