Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Manesh

macrumors member
Original poster
Oct 30, 2013
43
8
Can anyone tell me whats wrong with my code?
Im getting a
Code:
"*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'"

I have two tableviews, one showing who I'm connected to via MP connectivity, and the other showing the files in my documents directory.
I know this is because its saying that my array has 0 objects, and I'm trying to access the object at index 1.
But I have a file in my documents directory.
when the app closes and opens again, the tableview is displayed correctly, but as soon as something is deleted, it presents me with the error.

Help would be great!

Code:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if (tableView == _tblConnectedDevices){
    return [_arrConnectedDevices count];
    }
    if ([filePathsArray count] > 1){
        return [filePathsArray count];
    }
    else 
    return 1;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (tableView == _tblConnectedDevices){
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
    
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"];
    }
    
    cell.textLabel.text = [_arrConnectedDevices objectAtIndex:indexPath.row];
    
    return cell;
    } else {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
        if ([filePathsArray count] == 0){
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil];
            NSLog(@"top %i",indexPath.row);
        }
        if ([filePathsArray count] > 0) {
            NSLog(@"bot %i",indexPath.row);
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil];
            NSString *last = [documentsDirectory stringByAppendingPathComponent:[filePathsArray objectAtIndex:indexPath.row]];
            NSString *last2 = [[last lastPathComponent] stringByDeletingPathExtension];
            cell.textLabel.text = last2;
            NSLog(@"bot %i",indexPath.row);
        }
        return cell;
    }
    
}


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

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    fileName = cell.textLabel.text;
}

-(IBAction)deleteFile:(id)sender{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask,
                                                         YES);
    NSString *fullPath = [[paths lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.txt", fileName]];
    NSError *error;
        [[NSFileManager defaultManager] removeItemAtPath:fullPath error:&error];
    [filePathsArray count];
    [_cellView reloadData];
}
 
Last edited:
Code:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if (tableView == _tblConnectedDevices){
    return [_arrConnectedDevices count];
    }
    if ([filePathsArray count] > 1){
        return [filePathsArray count];
    }
    else 
    return 1;
}

The 1st problem I see is that you will never get to the "if ([filePathsArray count] > 1)" if the 1st condition is true because at that point, you've left the method.

You are checking for a different condition after a return statement that is checking something else.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.