2012-06-05 24 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'。 –

相关问题