尝试为NSError设置本地化描述时,代码崩溃



如果有问题,我试图设置错误消息,但我得到了

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

您正在呼叫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:

当您需要更改初始化的NSError的localizedDescription时,您可以覆盖NSError类,如下所示:

@interface ValidationError : NSError
@property (nonatomic, strong) NSString *localizedDescription;
@end

否,setValue:forKey:是正确的使用方法。也许这是因为您需要创建NSMutableDictionary而不是NSDictionary。

您需要使用NSMutableDictionary或初始化程序来设置值。NSDictionary在初始化后无法更改。

NSDictionary* details = [NSDictionary dictionaryWithObject: @"..." 
                                                    forKey: NSLocalizedDescriptionKey];

最新更新