这是错误,我在其他一些问题中看到了它:
*由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [NSMutableIndexSet addIndexesInRange:]:范围{11529215046068470577,1}超过NSNotFound的最大索引值 - 1' ***首先抛出调用堆栈:
选择器可用并加载数据。 我按一个按钮转到特定行。这是按钮内的代码:
此代码有效:
[Picker reloadAllComponents];
[Picker selectRow:5 inComponent:0 animated:YES];
此代码无效
[Picker reloadAllComponents];
NSInteger Nnb = (NSInteger) self.Nbrow.text;
[Picker selectRow: **Nnb** inComponent:0 animated:YES];
为什么硬编码号码会起作用而不是动态号码?
我看到了这个问题: UIPickerView selectRow not working as expected 和委托的故事,但事实上,如果你编码一个数字,它的工作原理,它不适用于参数看起来很疯狂。
同样实施这两种方法时,不要忘记这是使用数字:
- (int)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
答案 0 :(得分:0)
问题在于这一行:
NSInteger Nnb = (NSInteger) self.brow.text;
您无法以NSString
方式投放NSInteger
。您可以使用NSString的integerValue方法来实现此目的:
NSInteger Nnb = [self.Nbrow.text integerValue];
答案 1 :(得分:0)
你不能这样做:
NSInteger Nnb = (NSInteger) self.Nbrow.text;
并期望所需的数字。这样做是将NSString
对象的指针转换为NSInteger
。它不会将文本字符串转换为其数值。
您需要使用正确的方法将字符串转换为数字。
NSInteger Nnb = [self.Nbrow.text integerValue];
BTW - 请学习使用正确的命名约定。变量和方法名称应以小写字母开头。类名应使用大写字母。