我正在尝试查找带路径的文件,然后使用NSFileManager类将其删除。 [info objectForKey:UIImagePickerControllerMediaURL]
确实返回一个字符串,所以我不明白为什么它失败了一个有效的参数。
NSError *error;
NSFileManager *manager = [NSFileManager defaultManager];
NSURL *url = [[NSURL alloc] initWithString:[info
objectForKey:UIImagePickerControllerMediaURL]];
if ([manager isDeletableFileAtPath: [info
objectForKey:UIImagePickerControllerMediaURL]]) {
BOOL success = [manager removeItemAtURL:url error:&error];
if (!success) {
NSLog(@"Error removing file at path: %@", error.localizedDescription);
}
}
我收到了这个错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException'
, reason: '-[NSURL length]: unrecognized selector sent to instance 0x175ede10'
答案 0 :(得分:3)
文档说明UIImagePickerControllerMediaURL
:
指定影片的文件系统URL。此键的值为 NSURL对象。
您的错误消息也是如此:
因此
NSError *error;
NSFileManager *manager = [NSFileManager defaultManager];
NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
if ([manager isDeletableFileAtPath:url]) {
BOOL success = [manager removeItemAtURL:url error:&error];
if (!success) {
NSLog(@"Error removing file at path:%@", error.localizedDescription);
}
}
答案 1 :(得分:2)
可以帮到你。
试试这个
NSString *urlStr =[NSString stringWithFormat:@"%@", [info
objectForKey:UIImagePickerControllerMediaURL]];
NSURL *url = [[NSURL alloc] URLWithString:urlStr];
比直接分配网址
NSURL *url = [[NSURL alloc] initWithString:[info
objectForKey:UIImagePickerControllerMediaURL]];
答案 2 :(得分:0)
基本上您没有在字典中获取URL字符串,因为[info objectForKey:UIImagePickerControllerMediaURL]
没有为选择的图像提供网址。
Documentaton说:
所选项目原始版本的资产库URL。 用户编辑拾取的项目后 - 例如通过裁剪图像或 修剪电影 - URL继续指向原始版本 挑选的项目。
但你可以像UIImage一样获得图像:
UIImage *image = info[UIImagePickerControllerOriginalImage];
答案 3 :(得分:0)
替换以下行
NSURL *url = [[NSURL alloc] initWithString:[info
objectForKey:UIImagePickerControllerMediaURL]];
这一行
NSURL * url = [NSURL fileURLWithPath:[info
objectForKey:UIImagePickerControllerMediaURL]];
我不确定它会解决您的问题。但我觉得它应该可以解决您的问题,因为文件管理器URLWithString:
不起作用,因为字符串包含文件路径,因此您必须使用fileURLWithPath:
答案 4 :(得分:0)
首先检查你的objectforkey是否重视它返回的内容。如果它正在返回url,那么在你编写的第三行中,initWithString只需替换为initWithUrl并尝试。