3

最初に=私はすでにここの前にこれを一度尋ねようとしたので謝罪します

私はこれに本当に苦労しています:

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{    
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        // Delete the row from the data source.


        [_mainTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }

}

上記のコードを使用することで、UITableViewに表示されている配列からエントリを削除できることがわかります。ただし、ユーザーがダウンロードした不要なファイルをドキュメントディレクトリから削除したいと考えています。

今、私はその間に、そしてこのコードをさらに検索した後:

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

NSString *file = [[NSString alloc] init];

for(int i=0; i<[paths count]; i++)
{
    file = [documentsDirectoryPath stringByAppendingFormat:@"/%@",_fileArray];
    NSLog(@"%@", file);
}

NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:file error:NULL];

コンソールのアレイにあるすべてのファイルとこのコードを一覧表示できます。

- (void)removeFile:(NSString*)fileName {

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3", fileName]];

    [fileManager removeItemAtPath: fullPath error:NULL];

    NSLog(@"image removed");

}

と一緒に:[self removeFile: _filename];特定のファイルを削除することができます。

だから私は前進している。しかし、ユーザーがファイルをスワイプして削除できるようになると、私は本当に行き詰まります。もちろん、ディレクトリにどのファイルが含まれるかはわかりません。

第二に-すべてのファイルが削除された後、tableViewをロードできるようにするにはどうすればよいですか? このコードを使用してそれを行う場合:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
if ([paths count] > 0)
{
    NSLog(@"Path: %@", [paths objectAtIndex:0]);

    NSError *error = nil;
    NSFileManager *fileManager = [NSFileManager defaultManager];

    // Remove Documents directory and all the files
    BOOL deleted = [fileManager removeItemAtPath:[paths objectAtIndex:0] error:&error];


}

終了エラーが発生します。これは、ディレクトリも削除されたためだと思います。

ここに少しコードがあることは知っていますが、誰かがこれを案内してくれることを本当に望んでいます:-)

4

2 に答える 2

1

選択したファイルをDocumentsディレクトリから削除する場合は、

Documentsまず、このようにアプリのディレクトリからすべてのファイルを取得する必要があります

-(NSArray *)listFileAtPath:(NSString *)path
{
    NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL];
    return directoryContent;
}

次に、上記の関数からreturn arrayを使用して、ファイルを次のように表示します。UITableView

NSArray *filesArray = [self listFileAtPath:documentDirectoryPath];

そして最後に、選択したファイルを削除するときは、そのファイルをDocumentsディレクトリから削除する必要があります。また、次のようなものfilesArrayを管理するためにも削除する必要があります。UITableView

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{    
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        // Delete the row from the data source.
        [_mainTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

        // Remove file from document directory 
        NSError *error = nil;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        BOOL deleted = [fileManager removeItemAtPath:[paths objectAtIndex:0] error:&error];

        // Remove file entry from filesArray
        [filesArray removeObjectAtIndex:indexPath.row];
    }
}

あなたがこのようなことをしたいなら、希望はあなたを助けるでしょう。

于 2013-01-17T11:52:59.357 に答える
1

私が正しく理解していれば、ステップバイステップガイドが必要です。NSMutableArray(mainArray)からデータを取得するUITableView(mainTableView)が機能していると考えてみましょう。

これにより、ドキュメントのディレクトリパスが返されます。

-(NSString*)filePath{
NSString *path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

NSLog(@"%@",path);
return path;
}

どこかで配列を初期化する必要があります、私はviewDidLoadでそれをしました。

 - (void)viewDidLoad
{
    [super viewDidLoad];

    mainDataArray=[[NSMutableArray alloc]init];
    [self loadContentsOfDirectory:[self filePath]];
}

//here i am  adding names of files from documents directory
-(void)loadContentsOfDirectory:(NSString*)path
{
    NSError *error=nil;
    NSArray *pathArray=[[NSFileManager defaultManager]contentsOfDirectoryAtPath:path error:&error];

   if (error) {
       NSLog(@"ERROR: %@",error);
   }else{
       if (pathArray) {
           [mainDataArray removeAllObjects];
           [mainDataArray addObjectsFromArray:pathArray];
       }
   }
}

#pragma mark UITableView_Methods

//delete file then if file is deleted , remove filename from array and remove cell
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
       NSString *fileName=[mainDataArray objectAtIndex:indexPath.row];

       NSError *error=nil;
       NSString *pathToDelete=[[self filePath]stringByAppendingPathComponent:fileName];
       BOOL succes=[[NSFileManager defaultManager]removeItemAtPath:pathToDelete error:&error];

       if (error) {
           NSLog(@"ERROR: %@",error);
       }

       // if file is succes deleted
       if (succes) {
           //remove this item from array 
           [mainDataArray removeObject:fileName];
           //and remove cell 
           [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
       }else{
            UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"Alert!" message:@"File can not be deleted" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
           [alertView show];
       }
   }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
   return [mainDataArray count];
 }

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *reusableCell=@"cell";

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:reusableCell];
    if (cell==nil) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusableCell];
    }
    cell.textLabel.text=[mainDataArray objectAtIndex:indexPath.row];

   return cell;
 }

あなたのエラーは、おそらくセル、配列内のオブジェクトを削除しないことだと思います。これがお役に立てば幸いです。

于 2013-01-19T15:21:40.050 に答える