我想从我的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目录中的内容,我想要删除的图像仍然存在。我做错了什么?
答案 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文件夹)。