Сбой кода при попытке установить локализованное описание для ошибки NSE - PullRequest
1 голос
/ 06 марта 2012

Я пытаюсь установить сообщение об ошибке, если что-то не так, но я получаю

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

Ответы [ 4 ]

8 голосов
/ 06 марта 2012

Вы звоните 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: напрямую.

1 голос
/ 30 июля 2013

Когда вам нужно изменить localizedDescription для NSError, который инициализируется, вы можете переопределить класс NSError, например так:

@interface ValidationError : NSError

@property (nonatomic, strong) NSString *localizedDescription;
@end
0 голосов
/ 06 марта 2012

Вам нужно использовать NSMutableDictionary или инициализатор, чтобы установить значение. NSDictionary не может быть изменен после его инициализации.

NSDictionary* details = [NSDictionary dictionaryWithObject: @"..." 
                                                    forKey: NSLocalizedDescriptionKey];
0 голосов
/ 06 марта 2012

Нет, setValue: forKey: правильный метод для использования.Может быть, это потому, что вам нужно создать NSMutableDictionary вместо NSDictionary.

...