从valueForKeyPath返回类型:?

时间:2012-04-20 10:10:52

标签: iphone objective-c kvc

这可能是我的导航错误,但我有点困惑为什么这不会返回一个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 个答案:

答案 0 :(得分:3)

是的,它返回一个objc对象:

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

Accessor Search Patterns for Simple Attributes中介绍了从非objc对象到objc对象(例如NSNumberNSValue)的自动转换详情。

因此,您将使用objc对象格式说明符%@

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

答案 1 :(得分:2)

valueForKeyPath返回一个对象。 int和char类型不是对象。通过酒店进入酒店。经营者或类似人员。

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

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

编辑:未完全阅读示例代码,更新了答案