2012-07-06 35 views
1

當我重寫我的類的getters和setters,並在別處設置miles屬性時,不會調用setter方法。我究竟做錯了什麼?目標C中沒有調用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); 

Distance.h

#import <Foundation/Foundation.h> 

@interface CYDistance : NSObject { 
    float miles, kilometers; 
} 

@property float miles; 
@property float kilometers; 

@end 

Distance.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 
+1

您的實現是針對Class Distance的,而您的接口是針對CYDistance類的。在CYDistance中定義getter和setter。 – 2012-07-06 17:15:26

+2

顯示您要創建CYDistance實例的代碼並將其設置爲「英里」屬性。 – Caleb 2012-07-06 17:37:18

+1

刪除@dynamic關鍵字,無論如何它們在這種情況下都不會被使用,這只是令人困惑。請提供一個例子,說明你是如何致電二傳手的。 – uvesten 2012-07-06 17:37:37

回答

-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 

這種方式在引用ivars時沒有錯誤。

0

考慮下面的代碼...

entry.distance.miles = s.floatValue; 

...如果entry.distance值爲nil,則miles訪問將不會被調用。