метод className? - PullRequest
       18

метод className?

4 голосов
/ 07 июня 2010

Я только что смотрел онлайн-лекцию о iPhone в Стэнфорде с января 2010 года и заметил, что парень из Apple продолжает ссылаться на получение имени класса объектов с помощью "className", например,

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

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

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

Gary

Ответы [ 3 ]

12 голосов
/ 07 июня 2010

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

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

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

2 голосов
/ 07 июня 2010

Метод 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 голосов
/ 07 июня 2010
NSStringFromClass( [someObject class] );

и до Objective-C 2.0

someObject->isa.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...