1

クラスの 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
4

2 に答える 2

0

次のコードを考えると...

entry.distance.miles = s.floatValue;

... の値が の場合entry.distancenilアクセサーmilesは呼び出されません。

于 2012-07-06T19:22:37.280 に答える
-1

次のように実装を記述してみてください。

#import "Distance.h"

@implementation CYDistance

@synthesize miles = _miles;
@synthesize kilometers = _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

このように、ivarを参照するときに間違いはありません。

于 2012-07-06T18:06:34.997 に答える