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

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

Например, предположим, что в моем каталоге документов есть четыре zip-файла.

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

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

1 Ответ

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

О, это довольно просто:

в LoadView,

    self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc] 
                                            initWithTitle:@"Back" 
                                                    style:UIBarButtonItemStylePlain 
                                                   target:self 
                                                   action:@selector(backButtonHit)];

-(void)backButtonHit
{
// removeItemAtPath: newFilepath stuff here
  [self.navigationController popViewControllerAnimated:YES];
}
...