2013-11-01 59 views
1

我试图找到一个带有路径的文件,然后使用NSFileManager类将其删除。 [info objectForKey:UIImagePickerControllerMediaURL]不会返回一个字符串,所以我不明白为什么它失败了一个有效的参数。来自initWithString的NSURL对象给出了 - [NSURL长度]错误

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

做一个的NSLog(@ “%@”,[信息objectForKey:UIImagePickerControllerMediaURL]; –

+0

根据该文件,值'UIImagePickerControllerMediaURL'键是'NSURL'而不是'NSString'(因为键的*名称也表示) –

+0

@LordZsolt它打印文件的完整路径 –

回答

0

基本上你没有得到的URL字符串在字典中,因为[info objectForKey:UIImagePickerControllerMediaURL]没有规定摄取的图像的URL。

Documentaton说:

The Assets Library URL for the original version of the picked item. After the user edits a picked item—such as by cropping an image or trimming a movie—the URL continues to point to the original version of the picked item.

但你可以得到图像的UIImage,如:

UIImage *image = info[UIImagePickerControllerOriginalImage]; 
0

替换以下行

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

这一行

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

我不确定它会解决您的问题。但我觉得它应该可以解决你的问题,因为对于文件管理器URLWithString:不起作用,因为字符串包含文件路径,所以你必须使用fileURLWithPath:

+0

这还是给我同样的错误。 –

0

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

+1

基本上,使用NSString代替似乎工作。 'NSString * path = [[info objectForKey:UIImagePickerControllerMediaURL] absoluteString];' 而我不得不改变'removeItemAtURL'为'removeItemAtPath'。 –

+0

是的,但在你的代码中,你正在使用removeitematurl,所以我评论这个,如果你使用字符串,它将是伟大的:) –

+0

你的建议使用initWithURL是正确的。我想我的评论应该是更加元的,但无论如何,我已经知道它更多的是在编写代码时保持一致的问题!这就是我想说的。 :) –

3

的文件说,为UIImagePickerControllerMediaURL

Specifies the filesystem URL for the movie. The value for this key is an NSURL object.

而且你的错误消息指出相同:

因此

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

可能帮助你。

试试这个

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

比你直接指定URL

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

谢谢。它为我的工作。 – Raja