Добавление словарного объекта в 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]];