将字典对象添加到NSMutableString

时间:2012-03-03 18:11:34

标签: nsdictionary 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长度]:无法识别的选择器发送到实例0x9155400' * 首先抛出调用堆栈:

2 个答案:

答案 0 :(得分:2)

您正在为int存储NSNumber作为ScoreKey,但您不能将其附加到字符串,因为它是错误的类型。您需要将其转换为NSString

您不能只将NSNumber转换为NSString,因为它完全不同类型;你应该使用正确的NSNumber方法:

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

您能够记录值的原因是因为在日志中放置%@会调用对象的description方法。此方法在NSObject中声明,并且Framework类实现它,以便它以字符串形式返回对象的表示。

答案 1 :(得分:0)

希望这个也可以帮助你[mString appendFormat:“%@”,[answer objectForKey:ScoreKey]];