Mam cztery pola tekstowe, które wiążą się ze ścieżką klucza modelu. Jeśli numer jest wpisany w pole tekstowe, wszystko działa zgodnie z planem. Jednakże, jeżeli liczba jest usuwany następnie pojawia się błąd w konsoli z:setNilValueForKey error
[0x1003144b0 Temperatura setNilValueForKey]: nie mógł ustawić zero jako wartość dla klucza Rankine
Próbowałem to naprawić za pomocą setNilValueForKey, ale wygląda na to, że nie działa (zobacz kod na dole pliku Temperature.h). Wszelkie sugestie, jak to naprawić, będą pomocne.
#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
i
#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
... odpowiedzieć na podstawie komentarzy ...
- (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! Rozumiem, że działa z twoją sugestią. Dzięki! Oto kod. – wigging
Zobacz edytowany post na odpowiedź na podstawie komentarza Madsena. – wigging