2013-03-19 9 views
7

Piszę metodę, która zwraca instancję widok kontrolera dla danej klasy widoku kontrolera, ale trzeba się upewnić, klasa przeszedł w rzeczywistości jest klasa widok kontroler:iOS: Jak sprawdzić daną klasę jest rodzajem klasy UIViewController?

- (UIViewController *)viewControllerWithClass:(Class)cls nibName:(NSString *)nibName 
{ 
    if (cls is kind of UIViewController subclass) 
     return [[[cls alloc] initWithNibNamed:nibName bundle:nil] autorelease]; 
    return nil; 
} 

nie mogę porównać nazwę klasa od cls nie może być UIViewController.

edit:

Niestety mam na myśli wewnątrz metody, w jaki sposób mogę sprawdzić czy cls jest rodzajem UIViewController podklasy

Odpowiedz

24
if ([cls isSubclassOfClass:[UIViewController class]]) { 


    //Your code 

} 
+4

Ponieważ jest to akceptowane odpowiedź chcę tylko wyjaśnić, że wszystkie inne odpowiedzi, które wykorzystują metodę isKindOfClass są złe, isKindOfClass nie działa dla obiektów typu „klasy” (jak CLS jest w tym przykład), [[klasa CDMyClass] toKindOfClass: [klasa CDMyClass]] zwraca NO także [CDMyClass isKindOfClass: [klasa CDMyClass]] zwraca NO. Aby użyć odbiornika, który jest typem klasy, powinieneś użyć isSubclassOfClass – LightMan

1

można użyć poniższy kod.

if ([cls isKindOfClass:[UIViewController class]]) { 
    //your code 
} 
0

Jeśli obiekt klasy przykładów klasę celu C do badań następnie użyć + (BOOL)isSubclassOfClass:(Class)aClass która zwraca wartość logiczną, która wskazuje, czy odbiornik jest wystąpienie określonej klasy lub przypadku każdej grupy, która dziedziczy ta klasa. (Wymagane)

if([cls isKindOfClass:[UIViewController class]]) 
{ 
} 

EDIT

Jeśli masz obiektu klasy, która jest podklasą albo identyczne z klasy mają być testowane następnie użyć + (BOOL)isSubclassOfClass:(Class)aClass która zwraca wartość logiczną wskazującą, czy klasy odbiorczego jest podklasą lub identyczną z daną klasą.

if([cls isSubclassOfClass:[UIViewController class]]) 
{ 
} 
0
// Check This out 
if([youViewControllerObject isKindOfClass:[UIViewController class]]) 
{ 
    NSLog(@"isViewcontroller Class"); 
} 
0

Ta odpowiedź przychodzi trochę późno, ale skoro chcesz sprawdzić klasę obiektu klasy (nie instancji klasy), po to odpowiednie testy:

+0

nie, nie chcą sprawdzać, czy to jest dokładnie 'UIViewController', chcą wiedzieć, czy jest to' UIViewController' lub jego podklasa – newacct

Powiązane problemy