MPMediaPickerController — iOS7

Я разработал тестовое приложение на iOS 7, которое выбирает музыку из музыкальной библиотеки с помощью MPMediaPickerController. Но когда я представляю контроллер средства выбора медиа, он показывает пустой экран. это код

(void) pickSong
{
    MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];
    mediaPicker.delegate = self;
    mediaPicker.allowsPickingMultipleItems = NO;
    mediaPicker.prompt = NSLocalizedString(@"Select Your Favourite Song!", nil);
    [mediaPicker loadView];
    [self.navigationController presentViewController:mediaPicker animated:YES completion:nil];
}

#pragma mark - MPMediaPickerController delegate

(void) mediaPicker:(MPMediaPickerController *) mediaPicker2 didPickMediaItems:(MPMediaItemCollection *) mediaItemCollection {
    [self dismissViewControllerAnimated:YES completion:nil];

    MPMediaItem *mediaItem = [[mediaItemCollection items] objectAtIndex:0];
    self.item.soundName = [mediaItem valueForProperty:MPMediaItemPropertyTitle];
    self.item.soundUrl = [[mediaItem valueForProperty:MPMediaItemPropertyAssetURL] absoluteString];
}

(void) mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{
    [self dismissViewControllerAnimated:YES completion:NULL];
}

Пожалуйста, помогите мне.


person user2291109    schedule 21.09.2013    source источник
comment
мне никто не поможет? :(   -  person user2291109    schedule 21.09.2013
comment
Андреа, у тебя есть идеи?   -  person user2291109    schedule 21.09.2013
comment
Мы заметили такое же поведение в нашем приложении при работе на iPhone 5S и iOS 7.0.1. С каким телефоном вы тестируете?   -  person Okku    schedule 23.09.2013
comment
Я обновил свой iphone5 и протестировал его.   -  person user2291109    schedule 24.09.2013
comment
Вы используете xcode 5? Когда мы пробуем наши старые сборки (созданные с помощью xcode4), у нас не возникает проблем. Какую версию xcode вы используете?   -  person Okku    schedule 24.09.2013
comment
да, я использую xcode 5   -  person user2291109    schedule 24.09.2013


Ответы (6)


Это ошибка iOS, но она возникает только при запуске 32-битной сборки на 64-битном (A7) устройстве (пока только iPhone 5S). Чтобы обойти это, добавьте в свое приложение 64-битную архитектуру. (Откройте настройки сборки в xcode и измените архитектуру с $ARCHS_STANDARD на $ARCHS_STANDARD_INCLUDING_64_BIT.) Затем вам, вероятно, потребуется исправить ряд проблем с компиляцией, компоновкой и временем выполнения. См. Руководство Apple по переходу на 64-разрядную версию.

person wombat57    schedule 29.10.2013
comment
хорошая попытка... но эта ошибка возникает на моем устройстве iPod touch 5G с чипом A5, который является 32-битный процессор - person abbood; 11.07.2015

Похоже, в ios7 есть ошибка, из-за которой он не хочет отображаться внутри контроллера навигации — попробуйте представить его непосредственно из контроллера представления.

person Ed Filowat    schedule 23.09.2013
comment
Я попытался представить его внутри контроллера представления. [самостоятельный PresentViewController: mediaPicker анимированный: ДА завершение: ноль]; но это все равно не помогает. - person user2291109; 24.09.2013
comment
любопытно, ваш контроллер представления находится внутри tabbarcontroller? - person Ed Filowat; 24.09.2013
comment
еще одна попытка :) - вы используете сборку разработчика ios7 перед золотым мастером? У них был полностью отключен сборщик мультимедиа в некоторых сборках для разработчиков. - person Ed Filowat; 25.09.2013
comment
@EdFilowat мой находится внутри контроллера вкладок ... почему это имеет значение? - person abbood; 11.07.2015
comment
также @EdFilowat, что вы об этом говорите? - person abbood; 11.07.2015
comment
@abbood - Не уверен, видимо, это была ошибка - она ​​начала работать в последующих обновлениях SDK. - person Ed Filowat; 12.07.2015

У меня была та же проблема, и для меня решением было сочетание двух решений, представленных здесь. Сначала мне пришлось преобразовать свое приложение в 64-разрядное, изменив архитектуру на «стандартную... (включая 64-разрядную)». После того, как я исправил все вызвавшие предупреждения, мне пришлось изменить MPMediaPickerController, чтобы он отображался модально, а не в стеке навигации:

- (IBAction)didSelectMusicPicker:(id)sender {
    MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];

    picker.delegate                     = self;
    picker.allowsPickingMultipleItems   = YES;
    picker.prompt                       = NSLocalizedString (@"Add songs to play", "Prompt in media item picker");

    //[self.navigationController pushViewController:picker animated:YES];
    [self presentViewController:picker animated:TRUE completion:NULL];
}

Конечно, мне также нужно было изменить mediaPicker:didPickMediaItems: и mediaPickerDidCancel:, чтобы использовать dismissViewControllerAnimated. После того, как все это было исправлено, средство выбора работало, как и ожидалось, как на iPhone 4, так и на iPhone 5S под управлением iOS 7.

person Justin Whitney    schedule 10.02.2014

мысль: представленный экран полностью пуст, или вы получаете панель навигации внизу, но без перечисленных дорожек? Я заметил, что начиная с iOS 7 средство выбора теперь по умолчанию открывается на вкладке «Список воспроизведения» (раньше оно открывалось на «Альбомы», насколько я помню)… если у вас нет списков воспроизведения на устройстве, которые учитывали бы пустой экран…

person Abel Domingues    schedule 16.10.2013
comment
Знаете ли вы, как изменить вкладку по умолчанию, которую он открывает? - person Richard Lovejoy; 03.12.2013

Я вижу список песен и выбираю песни. Но я не могу закрыть контроллер представления, нажав «Готово». Я пробовал PresentViewController, так как модальный контроллер устарел.

- (IBAction) showMediaPicker: (id) sender {

    picker =
    [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAnyAudio];

    picker.delegate                     = self;
    picker.allowsPickingMultipleItems   = YES;
    picker.prompt                       = NSLocalizedString (@"AddSongsPrompt", @"Prompt to user to choose some songs to play");

    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleDefault animated:YES];
    [self.picker removeFromParentViewController];
  [self presentViewController:picker animated:YES completion:nil];
   // [picker release];
}


// Responds to the user tapping Done after choosing music.
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection {
    [self.picker removeFromParentViewController];
        [self dismissViewControllerAnimated:YES completion:nil];
   //
    [self.delegate updatePlayerQueueWithMediaCollection: mediaItemCollection];
   // [self.mediaItemCollectionTable reloadData];

   // [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackOpaque animated:YES];
}

Я также пробовал RemovefromSuperview, ничего не работает. Я тестирую это на симуляторе iPhone 6 и iPhone 5 с iOS 8.1.3.

Кто-нибудь???

person Neo101    schedule 01.02.2015
comment
ваш ответ не должен быть вопросом - person abbood; 11.07.2015

У меня тоже такая же проблема раньше. Но я обнаружил, что после обновления просто нужно перезагрузить устройство. Снова появится окно выбора музыки.

person Payne Chu    schedule 24.09.2013
comment
Я тестировал с другим устройством, но это то же самое. то же самое происходит и в эмуляторе - person user2291109; 24.09.2013
comment
Симулятор никогда не поддерживает MPMediaPickerController. Вам нужно протестировать его в устройстве. Вы вручную перезагружали свое устройство после обновления до iOS7? - person Payne Chu; 24.09.2013
comment
@PayneChu Я никогда не видел, чтобы кто-то получал голосование за ответ на перезапуск в stackoverflow.. когда-либо - person abbood; 11.07.2015