【发布时间】:2023-03-12 21:44:01
【问题描述】:
我正在使用以下由 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 调用最终会调用自身导致无限循环。我猜有办法做到这一点,但我不知道它是什么,有什么想法吗?
【问题讨论】:
-
psst。你的意思可能是:
[@"oz" isEqualToString:[SettingHandler getUnitsTypeShort]]而不是:[SettingHandler getUnitsTypeShort] == @"oz"
标签: iphone objective-c core-data