为什么NSString的这种类型转换为NSNumber会返回无效值-1?

时间:2017-01-24 16:50:11

标签: nsstring type-conversion nsnumber

这是有问题的代码行:

bks.quantity = [NSNumber numberWithInteger: [[arrayOfSplitStrings[i] objectAtIndex:[[sd.dictionaryOfUserIndexes objectForKey: @"29"] intValue]] intValue]-1];

sd.dictionaryOfUserIndexes objectForKey:@“29”包含一个必须转换为NSNumber的字符串(表示数量)。当使用有效的字符串数量(0-10)执行语句时,它总是返回-1,当它应该返回该值的NSNumber时。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

这不是一个“直截了当”的答案(因为解决方案只是一个愚蠢的答案),它更多是对工作方法的建议,这就是我发布答案的原因。

将各种线条放在一条线上并不总是好的。 特别是在您遇到问题的情况下。最好逐个拆分每个命令,然后进行调试,检查每个命令的值。

在你的情况下:

bks.quantity = [NSNumber numberWithInteger: [[arrayOfSplitStrings[i] objectAtIndex:[[sd.dictionaryOfUserIndexes objectForKey: @"29"] intValue]] intValue]-1];

==>

NSInteger userOfIndexes = [[sd.dictionaryOfUserIndexes objectForKey: @"29"] intValue];
NSLog(@"userOfIndexes: %d", userOfIndexes);
NSInteger n = [arrayOfSplitStrings[i] objectAtIndex:userOfIndexes] intValue];
NSLog(@"n: %d", n);
bks.quantity = [NSNumberWithInteger:n-1];

我添加了NSLog(),但可以使用断点和调试器检查值。我还可以使用

添加arrayOfSplitStrings的检查
NSArray *splitStrings = arrayOfSplitString[i];
NSLog(@"splitStrings: %@", splitStrings);

并将n替换为:

NSInteger n = [splitStrings objectAtIndex:userOfIndexes] intValue];

这样一来,你会明确地检查(根据你的评论),你的问题是把“-1。

NSInteger n = [[arrayOfSplitStrings[i] objectAtIndex: userIndex-1] intValue];