Возвращаемый тип из valueForKeyPath:?

Это, вероятно, ошибка с моей стороны, но я немного запутался, почему это не возвращает int (так как это тип свойства, идентифицируемый путем ключа). Возвращает ли значение valueForKeyPath: вместо этого может кто-нибудь объяснить.

// Simple Object
@interface Hopper : NSObject
@property(nonatomic, assign) int mass;
@end

// Test
Hopper *hopper = [[Hopper alloc] init];
[hopper setMass:67];
NSLog(@"HOPPER: %d", [hopper valueForKeyPath:@"mass"]);

,

WARNING: Conversion specifies type 'int' but the argument has type 'id'

2 ответа

Решение

Да, он возвращает объект objc:

- (id)valueForKeyPath:(NSString *)keyPath;

Сведения об автоматическом преобразовании объектов не-objc в объекты objc (например, NSNumber а также NSValue) рассматривается в шаблонах поиска аксессоров для простых атрибутов.

Поэтому вы должны использовать спецификатор формата объекта objc. %@:

NSLog(@"HOPPER: %@", [hopper valueForKeyPath:@"mass"]);

valueForKeyPath возвращает объект. Типы int и char не являются объектами. Доступ к собственности через. оператор или аналогичный.

NSLog(@"HOPPER: %d", [hopper mass]);

NSLog(@"HOPPER: %d", hopper.mass);

Изменить: не полностью прочитал пример кода, обновленный ответ

Другие вопросы по тегам