Bazinga
Bazinga

Reputation: 2466

Delete item in NSDocumentDirectory

I'm using the HSImageSidebarView, when an image is tapped, an AlertView will pop-up if you want to delete it. This is how it deletes its image shown in the sidebar:

-(void)sidebar:(HSImageSidebarView *)sidebar didTapImageAtIndex:(NSUInteger)anIndex {
    NSLog(@"Touched image at index: %u", anIndex);
    if (sidebar.selectedIndex == anIndex) {
        UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Delete image?"
                                                           delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                             destructiveButtonTitle:@"Delete" otherButtonTitles:nil];

        self.actionSheetBlock = ^(NSUInteger selectedIndex) {
            if (selectedIndex == sheet.destructiveButtonIndex) {
                [sidebar deleteRowAtIndex:anIndex];
                self.actionSheetBlock = nil;
            }
        };

        [sheet showFromRect:[sidebar frameOfImageAtIndex:anIndex]
                     inView:sidebar
                   animated:YES];

    }
}
- (void)sidebar:(HSImageSidebarView *)sidebar didRemoveImageAtIndex:(NSUInteger)anIndex {
    NSLog(@"Image at index %d removed", anIndex);
    [images removeObjectAtIndex:anIndex];
}

BTW, my images are from NSDocumentDirectory, but what I wanted to add is when an image is tapped in the side bar, it also deletes the image in NSDocumentDirectory.

I know this is how to delete the image in the NSDocumentDirectory, but i dont know how to use it in the above code.

- (void)removeImage:(NSString*)fileName {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", fileName]];
    [fileManager removeItemAtPath: fullPath error:NULL];
    NSLog(@"image removed");
}

Upvotes: 1

Views: 1251

Answers (2)

borrrden
borrrden

Reputation: 33421

You need to keep a list of file names along with your images. Or, in your case, I saw in your last question that your filenames are predictable. So just substitute Document Directory/image+index.png for fullPath in the above example. If that is not the case anymore, then you need to keep track of the filenames when you read them in, and store them in another array with the same indices.

Upvotes: 0

Meet
Meet

Reputation: 4934

I hope this may fix it:

 - (void)sidebar:(HSImageSidebarView *)sidebar didRemoveImageAtIndex:(NSUInteger)anIndex {
    NSLog(@"Image at index %d removed", anIndex);

//remove the image from Document dir
[self removeImage:[images objectAtIndex:anIndex]];

//then remove the image from the Array.
[images removeObjectAtIndex:anIndex];

}

- (void)removeImage:(NSString*)fileName {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", fileName]];
    [fileManager removeItemAtPath: fullPath error:NULL];
    NSLog(@"image removed");
}

Upvotes: 1

Related Questions