iPhone - отслеживание события кнопки назад - PullRequest
0 голосов
/ 27 декабря 2010

У меня есть tableView, который перечисляет содержимое моего каталога документов. У меня есть несколько почтовых файлов в этом. Если я касаюсь файла в tableView, соответствующий zip-файл распаковывается и извлекается во временную директорию (newFilePath в моем случае). Разархивированное содержимое указано в следующем табличном представлении. Когда я нажимаю кнопку «Назад», содержимое каталога снова отображается в списке.

Например, предположим, что в моем каталоге документов четыре архива.

songs.zip, videos.zip, files.zip, калькуляция.zip

Когда я запускаю приложение, все четыре файла перечислены в табличном представлении. Когда я касаюсь songs.zip, этот файл извлекается в newFilePath, а его содержимое передается в следующий табличный вид. Когда я возвращаюсь назад, предыдущий tableView, то есть четыре файла в каталоге документов снова отображаются в списке. Все отлично работает.

Проблема в том, что извлеченные файлы в newFilePath остаются там сами. Они занимают память без необходимости. Я хочу, чтобы они удалялись с этого пути, когда я касаюсь кнопки «назад», т. Е. Я хочу сделать newFilePath пустым при касании кнопки «Назад».

Я пытался это сделать. Но бесполезно. Я попробовал removeItemAtPath: метод в viewWillAppear:, а также в viewWillDisappear:. Но в обоих случаях это не сработало.

Есть ли другой способ отследить действие кнопки назад? Я хочу, чтобы событие произошло, когда нажата кнопка «Назад». Поэтому, пожалуйста, помогите мне, поделитесь своими идеями. Вот мой код для подтверждения.

Это мой didSelectRowAtIndexPath:

NSString *filePath = //filePath
if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
    NSLog(@"File exists at path: %@", filePath);
} else {
    NSLog(@"File does not exists at path: %@", filePath);
}       
ZipArchive *zip = [[ZipArchive alloc] init];
NSString *newFilePath = //newFilePath
[[NSFileManager defaultManager] createDirectoryAtPath:newFilePath withIntermediateDirectories:NO attributes:nil error:nil];
BOOL result = NO;

if([zip UnzipOpenFile:filePath]) {

    //zip file is there

    if ([zip UnzipFileTo:newFilePath overWrite:YES]) {

        //unzipped successfully

        NSLog(@"Archive unzip Success");

        result= YES;

    } else {

        NSLog(@"Failure To Extract Archive, maybe password?");

    }

} else  {

    NSLog(@"Failure To Open Archive");

}

iDataTravellerAppDelegate *AppDelegate = (iDataTravellerAppDelegate *)[[UIApplication sharedApplication] delegate];
//Prepare to tableview.
MyFilesList *myFilesList = [[MyFilesList alloc] initWithNibName:@"MyFilesList" bundle:[NSBundle mainBundle]];

//Increment the Current View
myFilesList.CurrentLevel += 1;

viewPushed = YES;
//Push the new table view on the stack
myFilesList.directoryContent = [AppDelegate getTemporaryDirectoryItemList:newFilePath];
[myFilesList setTitle:detailedViewController.strName];
[self.navigationController pushViewController:myFilesList animated:YES];
[myFilesList release];

Спасибо за ваши ответы.

Ответы [ 2 ]

1 голос
/ 27 декабря 2010

для создания собственного действия вам нужна пользовательская кнопка возврата. Но я думаю, что viewWillDisAppear также может решить вашу проблему.

используйте этот код для решения вашей проблемы

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



NSString *documentsDirectoryPath = [paths objectAtIndex:0];
 NSString *databaseFile = [documentsDirectoryPath stringByAppendingPathComponent:@"newFilePath"];

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

Это может помочьВы.

Редактировать:

    NSString *documentsDirectoryPath = [paths objectAtIndex:0];
    NSString *secondaryDirectoryPath = [secondaryDirectoryPath stringByAppendingPathComponent:@"secondary"];

     NSString *databaseFile = [documentsDirectoryPath stringByAppendingPathComponent:@"newFilePath"];

используйте эти строки в своем коде, если у вас есть каталог внутри каталога документов.

0 голосов
/ 27 декабря 2010

Вы можете добавить пользовательскую кнопку назад на панели навигации. Создайте метод, который будет вызывать событие нажатия кнопки «Назад».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...