2013-11-01 62 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