-1

にファイル名を表示するコードがいくつかありますuitableview。ただし、ファイルを削除して更新すると、エラーが発生します。ファイル名、削除ボタンのアクション、およびエラーを表示するコードは次のとおりです。

まず、ボタンが押されると、テーブルにファイルを追加するときに機能する次のコードを実行します。

-(IBAction)refresh{

    [[self mytable] reloadData];
}

次に、テーブルが表示する値を取得して表示するためのこのコードがあります。これは、削除と更新が発生するまで正常に機能します。

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    filePathsArray = [[[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil]mutableCopy];


    mytable.dataSource = self;
    mytable.delegate = self;



}

-

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(!filePathsArray)
    {
        return 0;
    }
    if ([filePathsArray count] > 0)
        return [filePathsArray count];
    else
        return 0;


}

-

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //add code here for when you hit delete
        NSString *currentFileName = filePathsArray[indexPath.row];
        NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) objectAtIndex:0];
        NSString *filePath = [documentsDirectoryPath stringByAppendingPathComponent:currentFileName];
        fileURL = [NSURL fileURLWithPath:filePath];
        NSLog(@"urlstring %@",fileURL);
        NSFileManager *fileManager = [NSFileManager defaultManager];
        [fileManager removeItemAtPath:filePath error:NULL];
        NSLog(@"successfully deleted");

    }
}

-

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MainCell"];
    }


    NSLog(@"urlstring %@",[filePathsArray objectAtIndex:indexPath.row]);


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil];

    cell.textLabel.text = [filePathsArray[indexPath.row] lastPathComponent];
filePathsArray = [[NSArray alloc] initWithArray: [[[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory error:nil]mutableCopy]];
    return cell;
}

-

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;

}

私が受け取るエラーはこれです:

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 6 beyond bounds [0 .. 5]'
*** First throw call stack:
(0x2049012 0x1473e7e 0x1ffeb44 0x3c3a 0x69b8fb 0x69b9cf 0x6841bb 0x694b4b 0x6312dd 0x14876b0 0x2c84fc0 0x2c7933c 0x2c79150 0x2bf70bc 0x2bf8227 0x2bf88e2 0x2011afe 0x2011a3d 0x1fef7c2 0x1feef44 0x1feee1b 0x23dc7e3 0x23dc668 0x5e0ffc 0x2212 0x2145)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

次の理由により、このエラーが発生します。

NSLog(@"urlstring %@",[filePathsArray objectAtIndex:indexPath.row]);

しかし、一度削除すると、問題は次の行にあると言われます。誰でも助けることができますか?

4

2 に答える 2