Возвращаемый тип из 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);
Изменить: не полностью прочитал пример кода, обновленный ответ