【问题标题】:What Is Wrong With My Array / Getting Error?我的阵列有什么问题/出现错误?
【发布时间】:2011-08-08 23:55:35
【问题描述】:

我有以下代码,但在 NSString *weight line 处出现错误:

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[NSArray objectAtIndex:]: index 2 beyond bounds [0 .. 1]” - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
       NSArray *array;
       array = [[NSArray alloc]initWithObjects:@"0", @"1/2", nil];           
       UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 37)];
       NSString *weight = [[array objectAtIndex:row] stringValue];
       label.text = [NSString stringWithFormat:@"%@", weight]

【问题讨论】:

  • 我已经添加了方法标题。它是一个 UIPickerView

标签: iphone objective-c


【解决方案1】:

问题就在错误消息中。问题是你有一个包含 2 个东西的数组(字符串“0”和“1/2”),而你要求它提供索引 2,这是无效的。 (只有 0 和 1 有效)。

您没有展示您是如何获得row 的,但这是您的问题。太大了。

【讨论】:

  • @Faisal:你的问题是一样的。选择器中的行数多于标签数组中的字符串数。这是如何发生的,这是一个不同的问题,您可能想在此处将其作为单独的页面提出,或者提供足够的上下文以便人们可以帮助您。
  • 好的,谢谢,我认为问题出在我的- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component 方法中
【解决方案2】:

“row”的值为 2,但您的数组只有 2 个元素,这意味着 row 的最大值只能为“1”

【讨论】:

    【解决方案3】:

    您的数组中有 2 个对象,从您的异常看来,该行是 2,它将尝试访问第三个对象。在您在同一方法中仅声明 2 个对象的情况下,为什么不在默认情况下使用 switch 语句和 log/assert?最终,您需要确保告诉选择器正确组件的正确列数。

    【讨论】:

    • 用建议更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多