2010-06-07 6 views
3

Je viens de regarder la conférence sur l'iPhone de Stanford en ligne à partir de janvier 2010 et j'ai remarqué que le gars d'Apple ne cesse de se référer à l'obtention d'un nom de classe d'objets en utilisant "className" par ex.méthode className?

NSArray *myArray = [NSArray arrayWithObjects:@"ONE", @"TWO", nil]; 
NSLog(@"I am an %@ and have %d items", [myArray className], [myArray count]); 

Cependant, je ne peux pas obtenir ce travail, le plus proche que je peux venir avec elle pour utiliser la classe, est mal className, a-il retiré, juste curieux?

NSArray *myArray = [NSArray arrayWithObjects:@"ONE", @"TWO", nil]; 
NSLog(@"I am an %@ and have %d items", [myArray class], [myArray count]); 

Gary

Répondre

12

La méthode className est uniquement disponible sur Mac OS X, et non sur iPhoneOS. Il est généralement utilisé pour le support de script, c'est pourquoi il n'existe pas sur l'iPhone. Vous pouvez utiliser quelque chose comme:

NSString* className = NSStringFromClass([myArray class]); 

Si vous souhaitez stocker la chaîne. NSStringFromClass() n'est pas strictement nécessaire, mais vous devriez probablement l'utiliser car c'est la manière "documentée" de faire les choses.

+0

Merci, je suis plus curieux qu'elle garderait se dit et pourtant, quand je l'ai essayé dans une application iPhone de base que je suis une erreur, je vois ce qui est cela arrive maintenant. – fuzzygoat

2

La méthode className existe uniquement sur le Mac. Cependant, il est assez facile à mettre en œuvre pour iPhone via une catégorie NSObject:

//NSObject+ClassName.h 
@interface NSObject (ClassName) 

- (NSString *) className; 

@end 

//NSObject+ClassName.m 
@implementation NSObject (ClassName) 

- (NSString *) className { 
    return NSStringFromClass([self class]); 
} 

@end 

maintenant tous les NSObject (et sous-classe) dans votre application aura une méthode className.

0
NSStringFromClass([someObject class]); 

et avant Objective-C 2,0

someObject->isa.name 
Questions connexes