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 オブジェクト (例:NSNumberおよびNSValue)への自動変換の詳細は、単純な属性のアクセサ検索パターンで説明されています。

したがって、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 に答える