Добавление словарного объекта в NSMutableString

У меня есть NSMutableArray allAnswers

NSMutableArray *allAnswers = [[NSMutableArray alloc] init];

Со значениями:

allAnswers --- (
        {
        PlayerName = Trfghuhhrf;
        Score = 1000;
    },
        {
        PlayerName = Test;
        Score = 333;
    },
        {
        PlayerName = DDDDDDDD;
        Score = 250;
    },
        {
        PlayerName = SSSSSSSSSSSSSSS;
        Score = 100;
    },
        {
        PlayerName = mn;
        Score = 100;
    }
)

Вот как я строю словарь.

    NSDictionary *answer = [NSDictionary dictionaryWithObjectsAndKeys:
                            name, PlayerKey,
                            [NSNumber numberWithInt:[score intValue]], ScoreKey,
                            nil];
    [allAnswers addObject:answer];


NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:ScoreKey ascending:NO];

[allAnswers sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];

NSLog(@"allAnswers --- %@",allAnswers);

for (NSDictionary *answer in allAnswers)
{
    NSLog(@"%@, %@", [answer objectForKey:PlayerKey], [answer objectForKey:ScoreKey]);

    NSMutableString *mString = [[NSMutableString alloc]init];
    [mString appendString:[answer objectForKey:PlayerKey]];
    [mString appendString:@" - "];
    [mString appendString:[answer objectForKey:ScoreKey]];

    NSLog(@"mString --******-- %@",mString);
}

Приложение ломается, когда я пытаюсь добавить [answer objectForKey:ScoreKey] к изменяемой строке. Я попытался преобразовать [answer objectForKey:ScoreKey] в (NSString), но это не помогло.

Посоветуйте пожалуйста что я делаю не так.

Извините за длинное описание.

Добавление журналов сбоев:


2012-03-03 00: 43: 48.149 NumberTwins [38378: 10703] - [__NSCFNumber length]: нераспознанный селектор отправлен в экземпляр 0x9155400 2012-03-03 00: 43: 48.149 NumberTwins [38378: 10703] * Завершение работы приложения из-за невыполнения исключение 'NSInvalidArgumentException', причина: '-[__NSCFNumber length]: нераспознанный селектор, отправленный экземпляру 0x9155400' * Первый вызов стека вызовов:

2 ответа

Решение

Вы храните int как NSNumber для ключа ScoreKey но вы не можете просто добавить это к строке, потому что это неправильный тип. Вы должны преобразовать его в NSString,

Вы не можете просто разыграть NSNumber для NSString потому что это совсем другой тип; Вы должны использовать правильный метод NSNumber:

[mString appendString:[[answer objectForKey:ScoreKey] stringValue]];

Причина, по которой вы можете зарегистрировать значение, заключается в том, что %@ в журнале называет объект description метод. Этот метод объявлен в NSObject, и классы Framework реализуют его так, что он возвращает представление объекта в виде строки.

Надеюсь, что это также поможет вам [mString appendFormat:"%@",[answer objectForKey:ScoreKey]];

Другие вопросы по тегам