2013-12-02 2 views
0

Я работаю с контроллером MPMediaPickerController.Подождите до выбора медиа в iPhone

Прямо сейчас я могу выбрать элемент из галереи, используя следующий код:

MPMediaPickerController *controller = [[MPMediaPickerController alloc]initWithMediaTypes:MPMediaTypeAnyAudio]; 
controller.delegate = mediaDelegate._pickerDelegate; 
[self presentViewController:controller animated:YES completion:nil]; 
NSLog(@"url :%@",singleton.url); 

Намерение состоит в том, что мой метод должен возвращать URL выбранного элемента. Вместо этого я получаю null для URL-адреса, потому что строка ниже текущего контроллера представления вызывается, как только отображается контроллер представления (он не ждет выбора элемента).

Есть ли способ остановить после presentViewController, для выбора элемента, а затем вернуть URL выбранного элемента из метода?

ответ

2

Вы должны реализовать MPMediaPickerControllerDelegate делегат:

- (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection 

Когда пользователь выбирает элемент, этот метод будет называться

+0

У меня уже есть этот способ. Но прежде чем я выберу этот метод, элемент управления вернется из верхнего метода, из которого я звоню. [Self presentViewController: контроллер анимированный: ДА завершение: nil]; и, следовательно, я получаю нулевой url – user3057042

+0

Я не думаю, что вы понимаете, как работает делегат. Вам нужно подождать, пока пользователь выберет это, и делегат будет вызван, вы не сможете остановить запуск вашей программы, чтобы ждать выбора. –

1

Вы должны написать эту

[self presentViewController:controller animated:YES completion:nil]; 
NSLog(@"url :%@",singleton.url); 

в

- (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection 

способ ..

+0

Можете ли вы объяснить, как это будет работать? – user3057042

+0

@ user3057042: Потому что в вашем коде вы являетесь контроллером после неистового создания. вам необходимо реализовать метод делегата. – user3057005

+0

Итак, когда пользователь выбирает какой-либо элемент, то после вызова метода delegate и представления вашего контроллера. – user3057005