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