UIpickerView 不使用参数行号

UIpickerView not working with a parameter row number

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

* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[NSMutableIndexSet addIndexesInRange:]: Range {11529215046068470577, 1} exceeds maximum index value of NSNotFound - 1' *** First throw call stack:

选取器可用并加载了数据。 我按下按钮转到特定行。这是按钮内的代码:

此代码有效:

[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

这一行有问题:

NSInteger Nnb = (NSInteger) self.brow.text;

你不能这样将 NSString 转换为 NSInteger。您可以使用 NSString 的 integerValue 方法来实现:

NSInteger Nnb = [self.Nbrow.text integerValue];

你不能这样做:

NSInteger Nnb = (NSInteger) self.Nbrow.text;

并期待所需的数量。这是在将 NSString 对象的指针转换为 NSInteger。它不会将文本字符串转换为其数值。

您需要使用正确的方法将字符串转换为数字。

NSInteger Nnb = [self.Nbrow.text integerValue];

顺便说一句 - 请学会使用正确的命名约定。变量和方法名称应以小写字母开头。 Class 名字必须大写。