【发布时间】:2012-07-07 04:20:48
【问题描述】:
当我为我的类重写 getter 和 setter,并在别处设置 miles 属性时,不会调用 setter 方法。我做错了什么?
我在这里调用miles 属性
// "entry" is an object that has a property of type CYDistance
if ([unitLabel.text isEqualToString:@"Miles"]) {
entry.distance.miles = s.floatValue;
}
else if ([unitLabel.text isEqualToString:@"Kilometers"]) {
entry.distance.kilometers = s.floatValue;
}
NSLog(@"Miles: %.2f", entry.distance.miles);
NSLog(@"Kilometers: %.2f", entry.distance.kilometers);
距离.h
#import <Foundation/Foundation.h>
@interface CYDistance : NSObject {
float miles, kilometers;
}
@property float miles;
@property float kilometers;
@end
距离.m
#import "Distance.h"
@implementation CYDistance
- (float)miles {
return miles;
}
- (float)kilometers {
return kilometers;
}
- (void)setMiles:(float)m {
miles = m;
kilometers = m * 1.609344;
NSLog(@"Set miles");
}
- (void)setKilometers:(float)k {
kilometers = k;
miles = k / 1.609344;
NSLog(@"Set kilometers");
}
@end
【问题讨论】:
-
您的实现是针对距离类的,而您的接口是针对类CYDistance的。在 CYDistance 中定义 getter 和 setter。
-
显示您正在创建 CYDistance 实例并将其设置为
miles属性的代码。 -
去掉@dynamic 关键字,在这种情况下无论如何都不会使用它们,这只是令人困惑。请提供一个示例,说明您如何调用 setter。
-
你几乎不想使用
@dynamic。它的目的是相当具体的,不是很常见。 -
您的 getter/setter 方法看起来正确。将 NSLog() 语句添加到您的 if/else if 语句中,以查看是否满足条件。
标签: objective-c methods overriding setter