错误:索引1超出界限[0 .. 0]

时间:2013-01-19 15:52:33

标签: objective-c xcode uitableview nsarray

我是Xcode的新手,我一直在使用显示此错误的UITableViewController。

这是错误消息: * 由于未捕获的异常'NSRangeException'而终止应用程序,原因:' * - [__ NSArrayM objectAtIndex:]:索引1超出边界[0 .. 0]' * 第一次抛出调用堆栈: (0x1c91012 0x10cee7e 0x1c330b4 0x36d0 0xc58d5 0xc5b3d 0xacce83 0x1c50376 0x1c4fe06 0x1c37a82 0x1c36f44 0x1c36e1b 0x1beb7e3 0x1beb668 0x1665c 0x2132 0x2065) libc ++ abi.dylib:terminate调用抛出异常 (lldb)

这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{


 if (indexPath.row == 0) {

    NSString *strURL = [NSString stringWithFormat:@"http://localhost:8888/GetDetail.php?choice=row0"];
    NSArray *arrayImagesNames = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:strURL]];


    arrayDataFromServer2 = [[NSMutableArray alloc]init];

    NSEnumerator *enumForNames = [arrayImagesNames objectEnumerator];

    id objName;

    while ( objName = [enumForNames nextObject]) {
        [arrayDataFromServer2 addObject:[NSDictionary dictionaryWithObjectsAndKeys:objName, @"name", nil]];
    }

    NSString *nn = [[arrayDataFromServer2 objectAtIndex:indexPath.row] objectForKey:@"name"];

    row1 = [nn intValue];
    NSLog(@"%d", row1);

    CompanyProfileViewController *profile = [self.storyboard instantiateViewControllerWithIdentifier:@"Profile"];
    [self.navigationController pushViewController:profile animated:YES];

    profile.profileid = row1;
    NSLog(@"%d", profile.profileid);
}

if (indexPath.row == 1) {

    NSString *strURL = [NSString stringWithFormat:@"http://localhost:8888/GetDetail.php?choice=row1"];
    NSArray *arrayImagesNames = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:strURL]];


    arrayDataFromServer2 = [[NSMutableArray alloc]init];

    NSEnumerator *enumForNames = [arrayImagesNames objectEnumerator];

    id objName;

    while (objName = [enumForNames nextObject]) {
        [arrayDataFromServer2 addObject:[NSDictionary dictionaryWithObjectsAndKeys:objName, @"name", nil]];
    }

    NSString *nn = [[arrayDataFromServer2 objectAtIndex:indexPath.row] objectForKey:@"name"];

    row1 = [nn intValue];
    NSLog(@"%d", row1);

    CompanyProfileViewController *profile = [self.storyboard instantiateViewControllerWithIdentifier:@"Profile"];
    [self.navigationController pushViewController:profile animated:YES];

    profile.profileid = row1;
    NSLog(@"%d", profile.profileid);
}

if (indexPath.row == 2) {

    NSString *strURL = [NSString stringWithFormat:@"http://localhost:8888/GetDetail.php?choice=row2"];
    NSArray *arrayImagesNames = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:strURL]];


    arrayDataFromServer2 = [[NSMutableArray alloc]init];

    NSEnumerator *enumForNames = [arrayImagesNames objectEnumerator];

    id objName;

    while ( objName = [enumForNames nextObject]) {
        [arrayDataFromServer2 addObject:[NSDictionary dictionaryWithObjectsAndKeys:objName, @"name", nil]];
    }

    NSString *nn = [[arrayDataFromServer2 objectAtIndex:indexPath.row] objectForKey:@"name"];

    row1 = [nn intValue];
    NSLog(@"%d", row1);

    CompanyProfileViewController *profile = [self.storyboard instantiateViewControllerWithIdentifier:@"Profile"];
    [self.navigationController pushViewController:profile animated:YES];

    profile.profileid = row1;
    NSLog(@"%d", profile.profileid);
}

if (indexPath.row == 3) {

    NSString *strURL = [NSString stringWithFormat:@"http://localhost:8888/GetDetail.php?choice=row3"];
    NSArray *arrayImagesNames = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:strURL]];


    arrayDataFromServer2 = [[NSMutableArray alloc]init];

    NSEnumerator *enumForNames = [arrayImagesNames objectEnumerator];

    id objName;

    while ( objName = [enumForNames nextObject]) {
        [arrayDataFromServer2 addObject:[NSDictionary dictionaryWithObjectsAndKeys:objName, @"name", nil]];
    }

    NSString *nn = [[arrayDataFromServer2 objectAtIndex:indexPath.row] objectForKey:@"name"];

    row1 = [nn intValue];
    NSLog(@"%d", row1);

    CompanyProfileViewController *profile = [self.storyboard instantiateViewControllerWithIdentifier:@"Profile"];
    [self.navigationController pushViewController:profile animated:YES];

    profile.profileid = row1;
    NSLog(@"%d", profile.profileid);
 }
}

当我点击第二个单元格(index.row == 1)时,会发生此错误。 我使用断点,错误就行了: “NSString * nn = [[arrayDataFromServer2 objectAtIndex:indexPath.row] objectForKey:@”name“];”

请帮助!

2 个答案:

答案 0 :(得分:1)

你有一个数组,你有0或1个元素。现在你试图从中提取第二个元素,[0]是第一个,[1]是第二个。

编辑:

因为您不确定数组何时包含一个或多个对象。因此,您可以使用:

NSString *nn=nil;
if([arrayDataFromServer2 count]>1){    
    nn = [[arrayDataFromServer2 objectAtIndex:indexPath.row] objectForKey:@"name"];
}

答案 1 :(得分:0)

雨燕4

更多时间后,我爱上了这个错误? 当您从情节提要中使用tableView并在代码中实现时: 提示并比较: 在段数和numberOfRowsInSection ==故事板和代码之间

 override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 3
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 1
    }