这可能是我的导航错误,但我有点困惑为什么这不会返回一个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'
答案 0 :(得分:3)
是的,它返回一个objc对象:
- (id)valueForKeyPath:(NSString *)keyPath;
Accessor Search Patterns for Simple Attributes中介绍了从非objc对象到objc对象(例如NSNumber
和NSValue
)的自动转换详情。
因此,您将使用objc对象格式说明符%@
:
NSLog(@"HOPPER: %@", [hopper valueForKeyPath:@"mass"]);
答案 1 :(得分:2)
valueForKeyPath返回一个对象。 int和char类型不是对象。通过酒店进入酒店。经营者或类似人员。
NSLog(@"HOPPER: %d", [hopper mass]);
NSLog(@"HOPPER: %d", hopper.mass);
编辑:未完全阅读示例代码,更新了答案