Ho quattro campi di testo che si collegano al percorso chiave del modello. Se un numero viene digitato nel campo di testo, tutto funziona come pianificato. Tuttavia, se il numero viene cancellato allora ottengo un errore nella console con:errore setNilValueForKey
[Temperatura 0x1003144b0 setNilValueForKey]: non poteva impostare zero come valore per la Rankine chiave
Ho cercato di risolvere questo problema utilizzando setNilValueForKey ma sembra non funzionare (vedere il codice alla fine del file Temperature.h). Qualche suggerimento su come risolvere questo potrebbe essere utile.
#import <Foundation/Foundation.h>
@interface Temperature : NSObject {
double celsius;
}
- (void)setCelsius:(double)degreesC;
- (double)celsius;
- (void)setKelvin:(double)degreesK;
- (double)kelvin;
- (void)setFahrenheit:(double)degreesF;
- (double)fahrenheit;
- (void)setRankine:(double)degreesR;
- (double)rankine;
@end
e
#import "Temperature.h"
@implementation Temperature
+ (NSSet *)keyPathsForValuesAffectingFahrenheit {
return [NSSet setWithObject:@"celsius"];
}
+ (NSSet *)keyPathsForValuesAffectingKelvin {
return [NSSet setWithObject:@"celsius"];
}
+ (NSSet *)keyPathsForValuesAffectingRankine {
return [NSSet setWithObject:@"celsius"];
}
- (void)setCelsius:(double)degreesC {
celsius = degreesC;
}
- (double)celsius {
return celsius;
}
- (void)setKelvin:(double)degreesK {
[self setCelsius:degreesK - 273.15];
}
- (double)kelvin {
return [self celsius] + 273.15;
}
- (void)setFahrenheit:(double)degreesF {
[self setCelsius:(degreesF - 32)/1.8];
}
- (double)fahrenheit {
return [self celsius] * 1.8 + 32;
}
- (void)setRankine:(double)degreesR {
[self setCelsius:(degreesR - 491.67) * 5/9];
}
- (double)rankine {
return ([self celsius] + 273.15) * 9/5;
}
- (void)setNilValueForKey:(NSString *)rankine {
[super setNilValueForKey:rankine];
}
@end
... rispondere sulla base di commenti ...
- (void)setNilValueForKey:(NSString*)key {
if ([key isEqualToString:@"celsius"]) return [self setCelsius: 0];
if ([key isEqualToString:@"fahrenheit"]) return [self setFahrenheit: 0];
if ([key isEqualToString:@"kelvin"]) return [self setKelvin: 0];
if ([key isEqualToString:@"rankine"]) return [self setRankine: 0];
[super setNilValueForKey:key];
}
Ah! Hai funzionato usando il tuo suggerimento. Grazie! Ecco il codice. – wigging
Vedere post modificato per la risposta basato sul commento di Madsen. – wigging