由于未捕获的异常终止应用程序' NSRangeException',原因:' *** - [__ NSArrayI objectAtIndex:]:索引0超出空数组的边界

时间:2015-03-13 14:14:51

标签: ios objective-c uitableview

我在Documents目录中创建了两个文件夹。 我有一个UITableView,显示文件夹中的项目。

Subfolder = @"/Sent";

它给了我一个威胁1:签署SIGABRT:

NSString *last = [dataPath stringByAppendingPathComponent:[filePathsArray objectAtIndex:indexPath.row]];

我有两个表视图,下面的代码一直正常工作,直到我将2个文件夹添加到文档目录。

-(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];
            NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",subFolder]];
            filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dataPath  error:nil];
        }
        if ([filePathsArray count] > 0) {

            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",subFolder]];
            filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dataPath  error:nil];
            NSString *last = [dataPath stringByAppendingPathComponent:[filePathsArray objectAtIndex:indexPath.row]];
            NSString *last2 = [[last lastPathComponent] stringByDeletingPathExtension];
            cell.textLabel.text = last2;
        }
        return cell;
    }
}

当我打开一个包含文件的文件夹时,它会正常加载,如果我打开没有任何内容的文件夹,我会收到以下错误。 如果我首先打开没有任何内容的文件夹,它很好,然后用它中的东西打开文件夹,它很好,然后当我回到空文件夹时,再次出现同样的错误。 我在这里错过了什么?

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'

1 个答案:

答案 0 :(得分:1)

您在方法中间重新分配filePathsArray。然后,您可以在索引处访问对象,而无需检查它是否在数组的边界内。这很可能不正确。

if ([filePathsArray count] > 0) {
    /* ... */
    filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dataPath  error:nil];
    NSString *last = [dataPath stringByAppendingPathComponent:[filePathsArray objectAtIndex:indexPath.row]];

重新分配后,filePathsArray中的对象数可能小于indexPath.row。

相关问题