1

这可能是我的试点错误,但我有点困惑为什么它不返回一个 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'
4

2 回答 2

3

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

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

有关从非 objc 对象自动转换为 objc 对象(例如NSNumberNSValue)的详细信息,请参见简单属性的访问器搜索模式

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

NSLog(@"HOPPER: %@", [hopper valueForKeyPath:@"mass"]);
于 2012-04-20T10:12:27.730 回答
2

valueForKeyPath 返回一个对象。int 和 char 类型不是对象。通过 访问该属性。运营商或类似的。

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

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

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

于 2012-04-20T10:12:19.297 回答