UIpickerView无法使用参数行号

时间:2015-12-04 18:16:00

标签: ios objective-c uipickerview

这是错误,我在其他一些问题中看到了它:

  

*由于未捕获的异常'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

2 个答案:

答案 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 - 请学习使用正确的命名约定。变量和方法名称应以小写字母开头。类名应使用大写字母。