为什么从 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];
这是有问题的代码行:
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];