iPhone - 跟踪后退按钮事件

时间:2010-12-27 06:12:10

标签: iphone objective-c uitableview ios4 uinavigationcontroller

我有一个tableView,它列出了我的文档目录的内容。我有一些zip文件。如果我触摸tableView中的文件,相应的zip文件将解压缩并提取到临时目录(在我的情况下为newFilePath)。解压缩的内容列在下一个tableView中。当我触摸后退按钮时,将再次列出目录中的内容。

例如,请考虑我的文档目录中有四个zip文件。

songs.zip,videos.zip,files.zip,calculation.zip

当我运行应用程序时,tableView中列出了所有四个文件。当我触摸songs.zip时,此文件将在newFilePath中提取,其内容将被推送到下一个tableView。当我回击时,再次列出前面的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 个答案:

答案 0 :(得分:1)

要创建自己的操作,您需要自定义后退按钮。但我认为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"];

如果文档目录中有目录,请在代码中使用这些行。

答案 1 :(得分:0)

您可以在导航栏上添加自定义后退按钮。创建方法,该方法将在“后退”按钮的单击事件中触发。