从iPhone中的app目录中删除图像

时间:2012-02-23 14:43:49

标签: ios iphone image uiimage delete-file

我想从我的iPhone应用程序中删除图像。 我使用下面的方法,将图像的名称作为参数传递。

问题是图像未被删除。

- (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: %@", fullPath);

    NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];    
    NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]);
}

最后两行显示我的app目录中的内容,我想要删除的图像仍然存在。我做错了什么?

3 个答案:

答案 0 :(得分:5)

您正在尝试删除Documents目录中的文件。然后,您将阅读bundle资源目录的内容。这些目录不同。

如果您正在尝试删除Documents目录中的文件,那么您最后应该在NSLog()中放置该目录。如果您尝试删除捆绑包中的文件,则无法执行此操作。应用程序包已签名且无法修改。

答案 1 :(得分:4)

您的代码看起来没问题,因此请尝试在代码中添加一些“NSError”对象:

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

   NSError *error = nil;
   if(![fileManager removeItemAtPath: fullPath error:&error]) {
      NSLog(@"Delete failed:%@", error);
   } else {
      NSLog(@"image removed: %@", fullPath);
   }

   NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];    
   NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]);
}

在上面的代码中,我传递了一个NSError removeItemAtPath的错误参数。如果系统无法删除该文件,则此方法将返回NO并填充error对象并显示错误。

答案 2 :(得分:2)

根据您的评论,我发现您正在尝试删除default.png并将其替换为另一个。不幸的是,这是不可能的。 image default.png是应用程序包的一部分,一旦创建和签名就无法修改(这是Apple的安全措施,因此应用程序在审核后无法更改)。您可以创建和删除文件的唯一位置是应用程序的沙箱(Documents文件夹)。