4

MPMediaPickerController を使用して音楽ライブラリから音楽を選択する iOS 7 のテスト アプリケーションを開発しました。しかし、メディア ピッカー コントローラーを提示すると、空の画面が表示されます。これがコードです

(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

私は同じ問題を抱えていましたが、私にとっての解決策は、ここで提示された 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 に答える
1

曲のリストが表示され、曲を選択できます。しかし、「完了」を押してもView Controllerを閉じることができません。Modalコントローラーが非推奨になったため、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 シミュレーターと iOS 8.1.3 を搭載した iPhone 5 でテストしています。

誰???

于 2015-02-01T18:30:39.657 に答える
1

考えてみてください: 提示された画面は完全に空ですか、それとも下部にナビゲーション バーが表示されていますが、トラックがリストされていませんか? iOS 7 の時点で、ピッカーはデフォルトで [プレイリスト] タブを開くようになっていることに気付きました (思い出すと、以前は [アルバム] タブが開いていました)...デバイスに空の画面の原因となるプレイリストがない場合...

于 2013-10-16T18:06:11.107 に答える