MPMediaPickerController - iOS7

时间:2013-09-21 13:25:59

标签: ios7 mpmediapickercontroller

我在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];
}

请帮帮我。

6 个答案:

答案 0 :(得分:4)

这是一个iOS错误,但只有在64位(A7)设备上运行32位版本时才会出现(目前仅限iPhone 5S)。要解决此问题,请在您的应用中添加64位架构。 (在xcode中打开构建设置,并将架构从$ ARCHS_STANDARD更改为$ ARCHS_STANDARD_INCLUDING_64_BIT。)然后,您可能需要修复许多编译,链接和运行时问题。请参阅Apple的64位过渡指南。

答案 1 :(得分:2)

似乎ios7中存在一个错误,它不希望在uinavigation控制器中显示 - 尝试直接从视图控制器中呈现它。

答案 2 :(得分:2)

我遇到了同样的问题,对我而言,解决方案是这里介绍的两种解决方案的组合。首先,我必须通过将架构更改为“标准...(包括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。完成所有修复后,选择器在运行iOS 7的iPhone 4和iPhone 5S上按预期工作。

答案 3 :(得分:1)

一个想法:显示的屏幕完全为空,或者您是否在底部获得了导航栏但没有列出任何曲目?我注意到,从iOS 7开始,选择器现在默认打开播放列表选项卡(如果我记得,它用于打开相册)...如果设备上没有可以解释空屏幕的播放列表...

答案 4 :(得分:1)

我可以看到歌曲列表并选择歌曲。但我不能在按下" Done"时忽略视图控制器。我已经尝试过PresentViewController,因为不推荐使用Modal控制器。

- (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模拟器和带iOS 8.1.3的iPhone 5上测试它。

任何???

答案 5 :(得分:0)

之前我也有同样的问题。但我发现只需要在升级后重启设备。音乐选择器再次出现。