2014-02-19 46 views
0

請原諒我把你的時間,但我花了大量的時間和嘗試,在我心中的一切,而我在互聯網上找到:/NSTableView的reloadData - 指數超越界限的異常

的問題是關於重裝在向其數組中添加1條記錄後的NSTableView。我的應用程序從掃描文件目錄開始,將它們的名稱和修改日期添加到NSDictionaries的NSMuttableArray中。然後將這些信息加載到NSTableView,並且一切正常。 但是當我'創建新的文件,並試圖重新加載NStableViev我'得到這個:

[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4] 

現在我想呈現什麼我'嘗試做一些代碼。

因此,這裏是我如何表中獲取數據

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{ 
    NSLog(@"--------->%ld",(long)filesCount); 
    return filesCount; 
} 

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn 
        row:(NSInteger)row { 
    NSDictionary *flag = FilesArray[row]; 
    NSString *identifier = [tableColumn identifier]; 

    if ([identifier isEqualToString:@"filename"]){ 
     NSTableCellView *cellview = [tableView makeViewWithIdentifier:@"filename" owner:self]; 
     [cellview.textField setStringValue:flag[@"name"]]; 
     return cellview; 

    }else if ([identifier isEqualToString:@"filedate"]){ 
     NSTableCellView *cellview = [tableView makeViewWithIdentifier:@"filedate" owner:self]; 
     [cellview.textField setStringValue:flag[@"date"]]; 
     return cellview; 
    } 
    return nil; 
} 

這裏什麼怎麼我'嘗試創建一個新文件時重新加載數據:

if([identifier isEqualToString:@"newFileModalDone"]){ 
     NSString *newFileName = [self fileNameModalDone]; 
//creating new file 
     [TxtFileObj WriteToFile:[newFileName stringByAppendingString:@".txt"] :nil]; 
//rescaning directory 
     [TxtFileObj GetFilesList]; 
     FilesArray = [TxtFileObj GetFileArray]; 
//updating files count 
     filesCount = [FilesArray count]; 

     [FilesListTable reloadData]; 

} 

我試圖觀看調試多時間和它看起來像例外來自

NSDictionary *flag = FilesArray[row]; 

所以我在想錯誤的數組大小a創造新電影,但我檢查了很多次,一切都很好。

請幫我找出我做錯了什麼,對不起,如果問題很明顯我對Objective C和COCOA很新。

謝謝你的幫忙!

+1

我不明白你的代碼。是'[TxtFileObj GetFilesList];'類方法嗎?這看起來並不正確。 – trojanfoe

+0

也請發佈您的實際代碼。 '返回單元格視圖;'不會編譯。 – trojanfoe

+0

@trojanfoe ty看看我的問題,'[TxtFileObj GetFilesList];'是一個實例方法。這是我的實際代碼,它編譯正常。 – MartyMcFly

回答

0

所以,閱讀一些論壇上後,我終於找到了我的錯誤:)

如果不知道其正確的,但現在它的做工精細,現在的代碼如下所示:

if([identifier isEqualToString:@"newFileModalDone"]){ 
     NSString *newFileName = [self fileNameModalDone]; 
     [FilesListTable beginUpdates]; 
     [TxtFileObj writeToFile:[newFileName stringByAppendingString:@".txt"] :nil]; 
     [TxtFileObj getFilesList]; 
     FilesArray = [TxtFileObj filesListArray]; 
     [FilesListTable insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:[FilesArray count]-1] 
           withAnimation:NSTableViewAnimationSlideDown]; 

     [FilesListTable endUpdates]; 
     [FilesListTable reloadData]; 
    } 

我基本上沒添加什麼3種方法:

[FilesListTable beginUpdates]; 

[FilesListTable insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:[FilesArray count]-1] 
            withAnimation:NSTableViewAnimationSlideDown]; 

[FilesListTable endUpdates];