4

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

请帮帮我。

4

6 回答 6

4

这是一个 iOS 错误,但仅在 64 位 (A7) 设备上运行 32 位构建时才会发生(目前仅 iPhone 5S)。要解决此问题,请向您的应用程序添加 64 位架构。(在 xcode 中打开构建设置,并将架构从 $ARCHS_STANDARD 更改为 $ARCHS_STANDARD_INCLUDING_64_BIT。)然后您可能需要修复一些编译、链接和运行时问题。请参阅 Apple 的 64 位转换指南。

于 2013-10-29T04:55:43.207 回答
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 上都可以正常工作。

于 2014-02-10T15:16:07.027 回答
2

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

于 2013-09-23T16:02:21.340 回答
1

我可以看到歌曲列表并选择歌曲。但是我不能在按下“完成”时关闭视图控制器。我已经尝试过 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 上对此进行测试。

任何人???

于 2015-02-01T18:30:39.657 回答
1

一个想法:显示的屏幕是完全空的,还是底部的导航栏没有列出曲目?我注意到,从 iOS 7 开始,选择器现在默认打开到播放列表选项卡(如果我记得的话,它曾经打开到专辑)......如果您的设备上没有播放列表会导致空屏幕......

于 2013-10-16T18:06:11.107 回答
0

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

于 2013-09-24T02:20:50.500 回答