这是有问题的代码行:
bks.quantity = [NSNumber numberWithInteger: [[arrayOfSplitStrings[i] objectAtIndex:[[sd.dictionaryOfUserIndexes objectForKey: @"29"] intValue]] intValue]-1];
sd.dictionaryOfUserIndexes objectForKey:@“29”包含一个必须转换为NSNumber的字符串(表示数量)。当使用有效的字符串数量(0-10)执行语句时,它总是返回-1,当它应该返回该值的NSNumber时。
我做错了什么?
答案 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];