2012-04-20 66 views
1

这可能是我的部分导航错误,但我有点困惑为什么这不会返回一个int(因为这是关键路径标识的属性的类型)。是否valueForKeyPath:返回一个对象,任何人都可以解释。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

料斗*料斗= [[ALLOC] INIT];应该是Hopper * hopper = [[Hopper alloc] init]; – CarlJ 2012-04-20 10:13:27

+0

感谢meccan,我的错误我应该从Xcode粘贴它,而不是只是在这里输入一个新鲜的。我已经更新了这个问题。 – fuzzygoat 2012-04-20 10:20:12

回答

3

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

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

详细自动转换非objc对象objc对象(如NSNumberNSValue)涵盖在Accessor Search Patterns for Simple Attributes中。

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

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

谢谢贾斯汀,非常感谢。 – fuzzygoat 2012-04-20 10:19:05

+0

@fuzzygoat不客气。 – justin 2012-04-20 10:21:53

+0

这很好... +1 – Diziet 2012-04-20 10:30:42

2

valueForKeyPath返回一个对象。 int和char类型不是对象。通过网站访问酒店。运营商或类似的。

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

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

编辑:没有充分阅读示例代码,更新的答案

+0

谢谢,它不完全清楚,因为文档说“返回值 由keyPath标识的派生属性的值。”这对未启动的可能是一个没有对象。 – fuzzygoat 2012-04-20 10:14:37

+0

我已经更新了我的答案了一点....我没有完全读你的代码。 – Diziet 2012-04-20 10:15:42

+0

它确实说 - (id)刚刚发现。 – fuzzygoat 2012-04-20 10:15:43