2013-03-19 2 views
7

Sto scrivendo un metodo che restituisce un'istanza View Controller per una determinata classe di visualizzazione del controller, ma ho bisogno di assicurarsi che la classe passato è in realtà una classe di visualizzazione del controller:iOS: come verificare una determinata classe è una sorta di classe 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; 
} 

non posso paragonare il nome di la classe dal cls potrebbe non essere UIViewController.

edit:

Mi dispiace significava all'interno del metodo, come faccio a controllare se cls è una sorta di UIViewController sottoclasse

risposta

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


    //Your code 

} 
+4

Dal momento che questa è la risposta accettata voglio solo chiarire che tutte le altre risposte che utilizzano il metodo isKindOfClass sono sbagliate, isKindOfClass non funziona per gli oggetti di tipo 'Classe' (come CLS è in questo esempio), [[Classe CDMyClass] isKindOfClass: [classe CDMyClass]] restituisce NO anche [CDMyClass isKindOfClass: [classe CDMyClass]] restituisce NO. Per usare un ricevitore che è un tipo di classe dovresti usare isSubclassOfClass – LightMan

1

è possibile utilizzare il codice qui sotto.

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

Se si dispone di un oggetto di classe che rappresenta la classe Objective-C da testare poi usare + (BOOL)isSubclassOfClass:(Class)aClass che restituisce un valore booleano che indica se il ricevitore è un'istanza di una data classe o un'istanza di una classe che eredita da quella classe. (Richiesto)

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

EDIT

Se si dispone di un oggetto di classe che è una sottoclasse di-o identico alla classe da testare quindi utilizzare + (BOOL)isSubclassOfClass:(Class)aClass che restituisce un valore booleano che indica se la classe di ricezione è una sottoclasse di, o identica a, una determinata classe.

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

Questa risposta viene un po 'in ritardo, ma dal momento che si desidera controllare la classe di un classe di oggetti (non un'istanza di una classe), il seguente è il test appropriato:

+0

no, non vogliono controllare che sia esattamente 'UIViewController', vogliono sapere se è 'UIViewController' o una sua sottoclasse – newacct