Objective-C Personnalisé Getter / Setter

Je suis en utilisant le suivant NSManagedObject qui a été généré automatiquement par Xcode:

@interface Portion :  NSManagedObject  
{
}

@property (nonatomic, retain) NSNumber * volume;

Je voudrais créer un getter/setter pour convertir entre ml/oz en fonction de ce que l'utilisateur a défini, de cette façon, la base de données stocke toujours la même valeur et il est automatiquement converti en parts privilégiées. Ma dernière tentative ressemble à ceci:

#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];
    }
}

La setVolume la fin de l'appel en appelant lui-même provoque une boucle infinie. Je devine qu'il y a un moyen de le faire, mais je ne sais pas ce que c'est, des idées?

le tdfp. tu veux sans doute dire quelque chose comme:[@"oz" isEqualToString:[SettingHandler getUnitsTypeShort]] au lieu de:[SettingHandler getUnitsTypeShort] == @"oz"

OriginalL'auteur Winder | 2010-11-10