2012-06-05 25 views
2

有沒有什麼辦法讓結果:如何獲取沒有實例的Class對象?

NSObject *a = [[NSObject alloc] init]; 
    [a class]; 

沒有實例? 我希望通過對象作爲參數,然後檢查它。就像這樣:

- (void) pushControllerOfClass: (Class) aClass 
    { 
     if([aClass isSubclassOfClass: *what should I write here?*]) { 
     ... 
     } 
    } 

直觀地說,我試着寫

 if([aClass isSubclassOfClass: UIViewController]) { 

但它不工作。 Thx未來響應。

更新: 在ObjectiveC中這樣的功能被認爲是不好的嗎? 我從Nahavandipoor的書iOS 5編程手冊重構的代碼。 這就像:

- (void) pushSecondController{ 
    SecondViewController *secondController = [[SecondViewController alloc] 
              initWithNibName:nil 
              bundle:NULL]; 
    [self.navigationController pushViewController:secondController animated:YES]; 
} 

對我來說,這是一種不好的功能: 當它應該是它不參數化。

回答

8

與嘗試:

if([aClass isSubclassOfClass:[UIViewController class]]) 
2

你可以寫[UIViewController class]獲取類對象。

+0

您也可以編寫'UIViewController.class'。 –

0

大多數類都應該有一個類方法來獲得類。

如果您發現自己經常這樣做,也許會重新訪問您的設計?

+0

在OP更新中回答,因爲註釋中沒有代碼格式。 – folex

3

在回答你的問題時,你不需要一個對象的實例來獲得它的類。您可以直接從類得到它就像:

[NSString class]; 
[YourClass class]; 

但是,如果所有你想要的是能夠推動你給它的任何視圖控制器,那麼你可以使用的UIViewController作爲參數類型的方法:

- (void)pushAnyViewController:(UIViewController *)viewController 
{ 
    [self.navigationController pushViewController:viewController animated:YES]; 
} 

這將採取任何視圖控制器是UIViewController的子類並將其推送到導航堆棧上。

如果你真的想要的方法來處理分配,以及你可以這樣做:

- (void)pushViewControllerClass:(Class)viewControllerClass 
{ 
    if ([viewControllerClass isSubclassOfClass:[UIViewController class]]) 
    { 
     id viewController = [[viewControllerClass alloc] initWithNibName:nil bundle:nil]; 
     [self.navigationController pushViewController:viewController animated:YES]; 
    } 
} 

,並調用它是這樣的:

Class viewControllerClass = [MyViewController class]; 
[self pushViewControllerClass:viewControllerClass]; 

只要確保筆尖被命名爲相同作爲班級,如果你正在使用一個。

+0

你也可以編寫'NSString.class'和'YourClass.class'。 –

相關問題