我有四个绑定(bind)到模型键路径的文本字段。如果在文本字段中输入一个数字,一切都会按计划进行。但是,如果号码被删除,那么我会在控制台中收到错误消息:
[Temperature 0x1003144b0 setNilValueForKey]:无法将 nil 设置为键 rankine 的值
我尝试使用 setNilValueForKey 解决此问题,但它似乎不起作用(请参阅 Temperature.h 文件底部的代码)。有关如何解决此问题的任何建议都会有所帮助。
#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
和
#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
...根据评论回答...
- (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];
}
最佳答案
您对 -setNilValueForKey: 的覆盖不会完成任何事情,因为它只是调用 super(旨在引发异常)。您需要真正正确地处理 nil 值。具体如何处理取决于您,但这样的事情可能是合理的:
- (void)setNilValueForKey:(NSString*)key
{
if ([key isEqualToString:@"rankine"])
{
self.rankine = 0;
return;
}
[super setNilValueForKey:key];
}
您可能还想为类中的其他键(华氏度、开尔文和摄氏度)处理 nil 值。
关于objective-c - setNilValueForKey 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9102884/