为什么从 NSString 到 NSNumber returns 的这种类型转换会导致 -1 的无效值?

Why does this type conversion of NSString to NSNumber returns invalid value of -1?

这是有问题的代码行:

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

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

我做错了什么?

这不是 "straight forward" 答案(因为解决方案只是一个愚蠢的答案),它更像是对工作方法的建议,这就是为什么我 post 一个答案。

将多行放在一行中并不总是好的。 特别是当您遇到问题时。最好将每个命令一个一个地拆分,然后调试,检查每个命令的值。

你的情况:

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