有没有办法得到结果:
NSObject *a = [[NSObject alloc] init];
[a class];
没有实例化? 我希望传递 Class 对象作为参数,然后检查它。像这样:
- (void) pushControllerOfClass: (Class) aClass
{
if([aClass isSubclassOfClass: *what should I write here?*]) {
...
}
}
直观地说,我试图写
if([aClass isSubclassOfClass: UIViewController]) {
但它不起作用。 感谢未来的回应。
更新 这样的功能在ObjectiveC中被认为是不好的吗? 我从Nahavandipoor的书 iOS 5 Programming Cookbook 中重构了代码。 就像那样:
- (void) pushSecondController{
SecondViewController *secondController = [[SecondViewController alloc]
initWithNibName:nil
bundle:NULL];
[self.navigationController pushViewController:secondController animated:YES];
}
至于我,这是一种不好的功能: 它应该是参数化的。
答案 0 :(得分:8)
尝试:
if([aClass isSubclassOfClass:[UIViewController class]])
答案 1 :(得分: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];
如果您正在使用nib,请确保该nib的名称与该类名称相同。
答案 2 :(得分:2)
您可以编写[UIViewController class]
来获取类对象。
答案 3 :(得分:0)
大多数类都应该有一个类方法来获取类。
如果你发现自己经常这样做,或许重新审视你的设计?