我使用下面的NSManagedObject这是自动Xcode中产生的:Objective-C的自定义的getter/setter
@interface Portion : NSManagedObject
{
}
@property (nonatomic, retain) NSNumber * volume;
我想创建一个自定义的getter/setter取决于毫升/盎司之间转换是什么用户已经设置,这样数据库总是存储相同的值,并自动转换为首选单位。我的最新尝试如下所示:
#import "Portion.h"
#import "SettingHandler.h"
#define MILLILITERS_PER_OUNCE 29.5735296
@implementation Portion
@dynamic volume;
- (void) setVolume:(NSNumber *) number {
if ([SettingHandler getUnitsTypeShort] == @"oz") {
[self setValue:number forKey:@"volume"];
} else {
[self setValue:[NSNumber numberWithFloat:[number floatValue] * MILLILITERS_PER_OUNCE] forKey:@"volume"];
}
}
- (NSNumber *) volume {
if ([SettingHandler getUnitsTypeShort] == @"oz") {
return [self valueForKey:@"volume"];
} else {
return [NSNumber numberWithDouble: [[self valueForKey:@"volume"] floatValue] * MILLILITERS_PER_OUNCE];
}
}
setVolume调用最终调用自身导致无限循环。我猜测有一种方法可以做到这一点,但我不知道它是什么,有什么想法?
吱吱。你可能的意思是:'[@“oz”isEqualToString:[SettingHandler getUnitsTypeShort]]'而不是:'[SettingHandler getUnitsTypeShort] == @“oz”' – justin 2010-11-10 04:46:12