1

ドキュメントディレクトリの内容を一覧表示するtableViewがあります。その中にいくつかのzipファイルがあります。tableView内のファイルに触れると、対応するzipファイルが解凍され、一時ディレクトリ(newFilePath私の場合)に抽出されます。解凍された内容は、次のtableViewに一覧表示されます。戻るボタンをタッチすると、ディレクトリの内容が再び表示されます。

たとえば、ドキュメントディレクトリに4つのzipファイルがあるとします。

songs.zip、videos.zip、files.zip、calculation.zip

アプリケーションを実行すると、4つのファイルすべてがtableViewに一覧表示されます。songs.zipをタッチすると、このファイルがに抽出され、newFilePathその内容が次のtableViewにプッシュされます。タッチバックすると、前のtableView、つまりドキュメントディレクトリ内の4つのファイルが再び一覧表示されます。すべてが完璧に機能します。

問題は、抽出されたファイル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];

ご回答ありがとうございます。

4

1 に答える 1

1

ああ、それは非常に簡単です:

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];
}
于 2010-12-24T10:08:18.673 に答える