1

我是一名新的 iPad 开发人员。

我在按钮单击时实现 UIPopover,并且 popover 包含整数值,

当我尝试用整数填充我的数组时,它向我显示SIGABRT索引 3 超出范围我无法看到我的日志,应用程序崩溃。

这是我的代码片段:

-(void)btnClick:(id)sender {

    for (int i=3; i<=31; i++) {
        [remindarray addObject:[NSNumber numberWithInteger:i]];
         NSLog(@"no=%@",[remindarray objectAtIndex:i]);
    }

    UIViewController* popoverContent = [[UIViewController alloc]init];
    UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(110, 0, 500, 4)];

    popoverTable = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 250, 665) style:UITableViewStylePlain];
    [popoverTable setDelegate:(id<UITableViewDelegate>)self]; 
    [popoverTable setDataSource:(id<UITableViewDataSource>)self]; 
    [self.view addSubview:popoverTable];
    [popoverTable release];

    [popoverView addSubview:popoverTable];
    popoverContent.view = popoverView;
    popoverContent.contentSizeForViewInPopover = CGSizeMake(250, 600);
    self.popoverController = [[UIPopoverController alloc]
                              initWithContentViewController:popoverContent];

    [self.popoverController  presentPopoverFromRect:CGRectMake(100,0, 535, 35) 
                                             inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];

    [popoverView release];
    [popoverContent release];
}

最后remind array我传递给cellForRowAtIndexPath

代码:

...
cell.textLabel.text=[remindarray objectAtIndex:indexPath.row];
...
4

5 回答 5

5

您的 for 循环从 3 开始,因此在数组中以 0 个项目开始,然后插入 1 个项目并尝试在索引 3 处记录该项目,该项目仍然不在数组内

快速解决方法是

改变

NSLog(@"no=%@",[remindarray objectAtIndex:i]);

NSLog(@"no=%@",[remindarray objectAtIndex:i - 3]);

或者从 0 开始数组

你也需要改变

cell.textLabel.text=[remindarray objectAtIndex:indexPath.row];

cell.textLabel.text=[NSString stringWithFormat:@"%@", [remindarray objectAtIndex:indexPath.row]];
于 2012-06-27T12:29:09.690 回答
2

因为新创建的数组索引从索引开始而0不是从3

问题出在这个循环中

for (int i=3; i<=31; i++) {
        [remindarray addObject:[NSNumber numberWithInteger:i]];
         NSLog(@"no=%@",[remindarray objectAtIndex:i]);
    }
于 2012-06-27T12:29:22.587 回答
1
for (int i=3; i<=31; i++) {
    [remindarray addObject:[NSNumber numberWithInteger:i]];
     NSLog(@"no=%@",[remindarray objectAtIndex:i]);
}

在这里,您从 3 开始 i 并且您将单个对象分配给提醒数组,因此起初它仅包含一个对象,因此 objectAtIndex:3 将为零,因此请像这样修改代码

NSLog(@"no=%@",[remindarray objectAtIndex:i-3]);

或者

NSLog(@"no=%@",[remindarray objectAtIndex:0]);
于 2012-06-27T12:30:11.883 回答
1

我认为引发异常的是这一行

NSLog(@"no=%@",[remindarray objectAtIndex:i]);

//
-(void)btnClick:(id)sender {
for (int i=3; i<=31; i++) {
    [remindarray addObject:[NSNumber numberWithInteger:i]];
    //your remindArray has one object, index is 0, but you are accessing the 
    //object which is at the index of 3, but the remindArray
    // has only one object [0]
     NSLog(@"no=%@",[remindarray objectAtIndex:i]);
}
于 2012-06-27T12:34:59.800 回答
1

解决方案很简单:在数组的索引 0 处添加一个对象,然后要在索引 3 处打印该对象。使用:

NSLog(@"no=%@",[remindarray objectAtIndex:i - 3]);
于 2012-06-27T12:41:49.127 回答