gpt4 book ai didi

ios - 删除下载到文档目录中的单个文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:37 24 4
gpt4 key购买 nike

首先=我很抱歉,因为我之前已经试过问过一次here

我真的很纠结:

// 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];


}

我收到终止错误 - 我认为那是因为该目录也已被删除。

我知道这里有一些代码,但我真的希望有人能指导我完成这个:-)

最佳答案

如果我理解正确,你需要一步一步的指导。假设您有一个工作的 UITableView (mainTableView),它从 NSMutableArray (mainArray) 获取数据。

这将返回文档目录路径。

-(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;
}

我认为你的错误是你没有删除数组中的某些单元格、对象。希望这会有所帮助。

关于ios - 删除下载到文档目录中的单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com