2015-03-13 73 views
0

我在我的Documents目錄中創建了兩個文件夾。 我有一個UITableView顯示文件夾中的項目。由於未捕獲的異常'NSRangeException'而終止應用程序,原因:'*** - [__ NSArrayI objectAtIndex:]:索引0超出空數組邊界

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

添加執行斷點,只是調試它。 – 2015-03-13 14:16:57

+0

嘗試將'NSError'變量傳遞給您重新設置'filePathsArray'的行,並檢查它是否報告任何錯誤。 – AMI289 2015-03-13 14:21:14

回答

1

您在方法中間重新指定filePathsArray。然後,您可以訪問索引處的對象,而不檢查它是否在數組邊界內。這很可能不正確。

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

重新分配filePathsArray中的對象數可以小於indexPath.row。

+0

我很感謝你的時間,但我對iOS開發很陌生,可能很明顯。在我的表格視圖中顯示文檔中子文件夾的正確方法是什麼? – Manesh 2015-03-13 15:23:07

相關問題