2012-04-20 3 views
1

Это, вероятно, ошибка пилота с моей стороны, но я немного смущен, почему это не возвращает int (как таковой тип свойства, идентифицированный по пути ключа). Does 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

Hopper * Бункер = [[Alloc] инициализации]; должен быть Hopper * hopper = [[Hopper alloc] init]; – CarlJ

+0

Спасибо meccan, моя ошибка Я должен был вставить его из Xcode, а не просто набрав его здесь. Я обновил вопрос. – fuzzygoat

ответ

3

Да, он возвращает объект ObjC:

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

Детали для автоматического преобразования из не-ObjC объектов в Объекты objc (например, NSNumber и NSValue) покрыты в Accessor Search Patterns for Simple Attributes.

Таким образом, вы будете использовать ObjC объекта спецификатор формата %@:

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

Спасибо, Джастин, очень благодарен. – fuzzygoat

+0

@fuzzygoat добро пожаловать. – justin

+0

Это хорошо ... +1 – Diziet

2

valueForKeyPath возвращает объект. Типы int и char не являются объектами. Доступ к собственности через. оператора или аналогичного.

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

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

Edit: Не полностью прочитать пример кода, обновленный ответ

+0

Спасибо, его совсем не ясно, так как документы говорят «Возвращаемое значение Значение для производного свойства, идентифицированного keyPath». который для un-initated может быть не объектом. – fuzzygoat

+0

Я немного обновил свой ответ. Я не полностью читал ваш код. – Diziet

+0

он действительно говорит - (id) просто заметил это. – fuzzygoat

Смежные вопросы