2010-06-07 2 views
3

Я только что смотрел лекцию по iPhone в Стэнфорде в Интернете с января 2010 года, и я заметил, что парень из Apple продолжает ссылаться на получение имени класса объектов, используя «className», например.классName метод?

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

Однако, я не могу получить эту работу, ближайший я могу придумать с ним использовать класс, это имя класса неправильно, так что удаляются, просто интересно?

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

Гэри

ответ

12

Метод className доступен только на Mac OS X, а не на iPhoneOS. Он обычно используется для поддержки скриптов, поэтому он не существует на iPhone. Вы можете использовать что-то вроде:

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

Если вы хотите сохранить строку. NSStringFromClass() не является строго необходимым, но вы, вероятно, должны использовать его, поскольку это «документированный» способ делать что-то.

+0

Спасибо, я был более любопытно, он продолжал получать упоминается и еще когда я попробовал его в основной iPhone приложение, которое я получил ошибку, я вижу, Что происходит сейчас. – fuzzygoat

2

className метод существует только на Mac. Тем не менее, это довольно легко реализовать для iPhone через NSObject категории:

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

- (NSString *) className; 

@end 

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

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

@end 

Теперь каждый NSObject (и подкласс) в вашем приложении будет иметь метод className.

0
NSStringFromClass([someObject class]); 

и до Objective-C 2,0

someObject->isa.name 
Смежные вопросы