2013-11-01 3 views
1

Я пытаюсь найти файл с контуром, а затем удалю его с помощью класса NSFileManager. [info objectForKey:UIImagePickerControllerMediaURL] действительно возвращает строку, поэтому я не понимаю, почему ее ошибка при действительном параметре.Объект NSURL из initWithString дает ошибку [NSURL length]

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' to' 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

Смежные вопросы