initWithString的NSURL对象给出了 - [NSURL length]错误

时间:2013-11-01 09:28:46

标签: ios objective-c exception nsstring

我正在尝试查找带路径的文件,然后使用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'

5 个答案:

答案 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并尝试。