2012-06-05 6 views
2

Есть ли способ, чтобы получить результат:Как получить объект класса без экземпляра?

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'. –