2016-09-26 1 views
1

Ich habe eine Anwendung für iOS erstellt, die wie ein Dokument-Viewer funktioniert, in dem ich Dokumente anzeigen kann und es wie Charme funktioniert. Ich listet die Dateien in einer Tabellenansicht auf und hat die Swipe-Funktion zum Löschen der Dateien und das Löschen einzelner Dateien erhalten. Ich habe die Mehrfachauswahl auch während der Bearbeitung aktiviert. Die Tabellenansichtszeilen werden ausgewählt, aber ich bin mir nicht sicher, wie die ausgewählten Dateien aus dem NSDirectory gelöscht werden. Kann jemand helfen ?Löschen mehrerer Dateien aus dem NSDirectory

Ich habe dies in didSelectRowForIndexPath:

if (self.tableView.isEditing) 
{ 
    [_selectedRows arrayByAddingObject:[self.tableView indexPathsForSelectedRows]]; 
} 

Ans diese Einstellung, wenn Löschtaste gedrückt wird,

- (void)deleteButton:(id)sender 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    for (id object in _selectedRows) { 
     UITableViewCell *selectedCell = [self.tableView cellForRowAtIndexPath:object]; 

     NSString *cellText = selectedCell.textLabel.text; 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *fileName =[NSString stringWithFormat:@"/Inbox/"]; 

     NSString *allFilesPath = [documentsDirectory stringByAppendingPathComponent:fileName]; 

     NSString *theactualFilePath = [allFilesPath stringByAppendingPathComponent:cellText];  

     NSError *error; 

     _success = [[NSFileManager defaultManager] removeItemAtPath:theactualFilePath error:&error]; 
    } 

} 

Dies ist, wie ich die Tabellenansicht Zellen Bestücken

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

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Cell"]; 
} 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSLog(@"paths :%@",paths); 
textlabel = [[UILabel alloc] initWithFrame:CGRectMake(15,0, 250, 70)]; 



NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *fileName =[NSString stringWithFormat:@"/Inbox/"]; 

NSString *allFilesPath = [documentsDirectory stringByAppendingPathComponent:fileName]; 



if([[userDefaults objectForKey:@"searchON"] isEqualToString:@"yes"]) { 

    NSString *theFileName = [[_filePathsArrayCopy objectAtIndex:indexPath.row] lastPathComponent] ; 

    textlabel.text = theFileName; 
} 
    else { 

    NSString *theFileName = [[_filePathsArray objectAtIndex:indexPath.row] lastPathComponent] ; 



    textlabel.text = theFileName; 
} 
[cell.contentView addSubview:textlabel]; 


return cell; 

}

+0

... können Sie nicht einfach die Methode abstrahieren, die Sie verwenden, um eine einzelne Datei zu löschen, ziehen Sie alle ausgewählten Dateien in ein NSArray, und durchlaufen Sie das Aufrufen der Löschmethode ??? –

+0

Ich habe das versucht, und leider werden alle Dateien gelöscht. Ich werde den Code posten. –

+0

bitte tun, scheint wie ein einfacher Fehler –

Antwort

1

Also weil die Kommentare zu viel auf der Post sind, poste ich einfach eine mögliche Lösung.

- (void)deleteButton:(id)sender 
{ 
    NSArray *indexPaths = [self.tableView indexPathsForSelectedRows]; 
    NSString *docPath= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *inboxPath = [docPath stringByAppendingPathComponent: @"/Inbox/"]; 

    for (NSIndexPath *indexPath in indexPaths) { 
     NSString *fileName = [[_filePathsArrayCopy objectAtIndex:indexPath.row] lastPathComponent] ; 
     NSString *fullFilePath= [inboxPath stringByAppendingPathComponent:fileName ]; 

     NSError *error; 
     BOOL success = [[NSFileManager defaultManager] removeItemAtPath:fullFilePatherror:&error]; 
     if (error != nil) { 
      print(error) 
     } 
    } 

} 
+0

NEIN, ich habe festgestellt, dass ich ein benutzerdefiniertes UILAbel der Inhaltsansicht der Zelle hinzufügen und das ist, warum der TextLabel.text null zurückgibt. Jede Möglichkeit, den Text von diesem UILAbel zu bekommen? –

+0

versuchen Sie nicht, die TableViewCells wie ich im Code erwähnt zu bekommen, versuchen Sie, Ihre Variablen aus der Liste, die Sie verwendet haben, um die DataSource –

+0

Ich habe das nicht verstanden ... können Sie etwas klarer sein? –

Verwandte Themen