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



这是有问题的代码行:

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

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

我做错了什么?

这不是

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

多行放在一行中并不总是好的。尤其是在您遇到问题的情况下。最好逐个拆分每个命令,并调试每个命令的值。

在您的情况下:

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

最新更新