我正在使用由Xcode自动生成的以下NSManagedObject:
@interface Portion : NSManagedObject
{
}
@property (nonatomic, retain) NSNumber * volume;
我想创建一个自定义的getter/setter方法,根据用户设置将毫升(ml)和盎司(oz)之间进行转换,这样数据库始终存储相同的值,并且可以自动转换为首选单位。我的最新尝试如下:
#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