initWithString的NSURL对象给出了 – 错误

我试图find一个文件的path,然后删除它使用NSFileManager类。 [info objectForKey:UIImagePickerControllerMediaURL]确实返回一个string,所以我不明白为什么它失败了一个有效的参数。

 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' 

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); } } 

可能会帮助你。

尝试这个

 NSString *urlStr =[NSString stringWithFormat:@"%@", [info objectForKey:UIImagePickerControllerMediaURL]]; NSURL *url = [[NSURL alloc] URLWithString:urlStr]; 

比你直接分配的url

 NSURL *url = [[NSURL alloc] initWithString:[info objectForKey:UIImagePickerControllerMediaURL]]; 

基本上你没有得到字典中的URLstring,因为[info objectForKey:UIImagePickerControllerMediaURL]不提供[info objectForKey:UIImagePickerControllerMediaURL]图像的URL。

Documentaton说:

拾取项目的原始版本的资源库URL。 在用户编辑一个拣选的项目之后(例如通过裁剪图像或修剪电影),URL将继续指向拣选项目的原始版本。

但是你可以像UIImage一样获得图像:

 UIImage *image = info[UIImagePickerControllerOriginalImage]; 

replace下面的行

 NSURL *url = [[NSURL alloc] initWithString:[info objectForKey:UIImagePickerControllerMediaURL]]; 

用这条线

 NSURL * url = [NSURL fileURLWithPath:[info objectForKey:UIImagePickerControllerMediaURL]]; 

我不确定它会解决你的问题。 但我觉得它应该解决你的问题,因为文件pipe理器URLWithString:不工作,因为string包含文件path,所以你必须使用fileURLWithPath:

首先检查你的objectforkey值是什么它返回。 如果它正在返回url,那么在你写的initWithString的代码第三行只是replace成initWithUrl并尝试。