尝试为 NSError 设置本地化描述时代码崩溃
Posted
技术标签:
【中文标题】尝试为 NSError 设置本地化描述时代码崩溃【英文标题】:Code crashes when trying to set a localized description for an NSError 【发布时间】:2012-03-06 10:28:20 【问题描述】:如果出现问题,我正在尝试设置错误消息,但我得到了
This class is not key value coding-compliant for the key NSLocalizedDescription
这是我使用的代码
-(id)getMoneyFromAccount:(int) sum error:(NSError **)error
if(self.balance - sum < 0)
NSDictionary *details = [NSDictionary dictionary];
[details setValue:@"You don't have enough money" forKey:NSLocalizedDescriptionKey];
*error = [NSError errorWithDomain:@"money" code:200 userInfo:details];
return nil;
self.balance = self.balance - sum;
return [NSNumber numberWithInt:self.balance];
【问题讨论】:
【参考方案1】:你打电话给setValue:forKey:
,你应该打电话给setObject:forKey:
[details setObject:@"You don't have enough money" forKey:NSLocalizedDescriptionKey];
另外,你必须从NSDictionary
更改为NSMutableDictionary
或者设置初始化器中的值:
NSDictionary *details = [NSDictionary
dictionaryWithObject:@"You don’t…"
forKey:NSLocalizedDescriptionKey];
setValue:forKey:
可以使用可变字典,但最好直接调用 setObject:forKey:
。
【讨论】:
当我按照您的建议更改代码时,我得到“NSDictionary 可能无法响应 setObject:forKey” 是的,我想念您使用的是普通的、不可变的字典。我已经编辑了答案,现在代码必须工作。【参考方案2】:当您需要更改已初始化的 NSError 的本地化描述时,您可以重写 NSError 类,如下所示:
@interface ValidationError : NSError
@property (nonatomic, strong) NSString *localizedDescription;
@end
【讨论】:
【参考方案3】:不,setValue: forKey: 是正确的使用方法。也许这是因为您需要创建 NSMutableDictionary 而不是 NSDictionary。
【讨论】:
不使用 NSDictionary(不可变) 我不明白你在说什么?你总是可以用 [NSDictionary dictionaryWithDictionary:mutableDictionary] 得到一个 NSDictionary;来自可变字典。 他正在回复你的第一句话,NSDictionary
不会使用 NSLocalizedDescription
键回复 setValue:forKey:
。
@Ganzolo:正确,我没有阅读第二个。但是,您的陈述也是不正确的,因为您应该使用 setObject:ForKey:
为什么? NSLocalizedDescription 是 NSString。 setValue forKey 取 NSStrings 作为键。【参考方案4】:
您需要使用 NSMutableDictionary 或初始化程序来设置值。 NSDictionary 初始化后无法更改。
NSDictionary* details = [NSDictionary dictionaryWithObject: @"..."
forKey: NSLocalizedDescriptionKey];
【讨论】:
以上是关于尝试为 NSError 设置本地化描述时代码崩溃的主要内容,如果未能解决你的问题,请参考以下文章
NSError 奇怪的问题 - 尝试访问 NSError 的属性时应用程序崩溃
Swift 3.1:自定义错误转换为 NSError 以访问其域属性时崩溃
NSString 失败,应用程序崩溃尝试 NSLog NSError