2012-03-25 63 views
2

我想實現我的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,所以這就是我知道它沒有給我正確的結果。我錯過了什麼嗎?

編輯:我知道這不會給我正確的實例的方式是因爲在MainContainerViewControllerviewDidLoad,我有這樣的:

- (void)viewDidLoad 
{ 
    appDelegate.notesViewController=[[NotesViewController alloc] init]; 
    appDelegate.notesViewController.mainContainer=self; 
    [self addChildViewController: appDelegate.notesViewController]; 
} 

每個NotesViewControllerMainContainerViewController類型的屬性,從而使我總是有辦法從NotesViewControllers訪問MainContainerViewController。但是我剛剛瞭解了類別和擴展,並且我認爲實現一個類別可以讓我更方便地訪問容器視圖,而不是在每個視圖控制器上都有屬性。這是我第一次,所以我敢肯定,我在執行類別時做錯了什麼,只是不知道它是什麼。

+0

你想完成一個單身?你能否粘貼一些顯示失敗比較的代碼?也就是說,ExpectedHandleToVC!= self.mainContainerExtension。比較或NSLog(@「%p」,self)是測試其工作是否更直接的方法。 – danh 2012-03-25 14:38:23

+0

我對'NSLog(@%@「,self.mainContainerExtension)的輸出是:''。不太確定這是什麼意思,儘管 – Snowman 2012-03-25 14:45:28

+0

它是指向實例的指針。換句話說,是什麼讓你認爲它是錯的?典型的(非標籤欄)UIViewController應該有0個childViewControllers。 – danh 2012-03-25 14:59:10

回答

0

我不認爲實例方法返回自己可以是有用的。無論你要調用哪個對象:[someVC mainContainerExtension],你都已經有了答案:它是一些VC。

如果每個NotesViewController都有一個包含VC的屬性,那麼你是不是都設置了?只要是公開的NotesVC頭:

MainContainerViewController *mainVC = [[MainContainerViewController] alloc] init ...]; 

// then, after the view loads 
for (UIViewController *vc in mainVC.childViewControllers) { 
    NSLog(@"%@", (NotesViewController *)vc.mainContainer); 
} 

還要注意,除非有隻有一個應用NotesViewController,一個在的appDelegate得到分配將被覆蓋。 appDelegate中的句柄將是最後一個分配的句柄。