Runtime error when using MPMediaPickerController in iOS Simulator

核能气质少年 提交于 2020-01-12 04:38:32

问题


The following happens when I try to run an app using the MPMediaPickerController on the iOS Simulator.

2012-05-28 22:26:42.416 My App[48426:11f03] Could not load source: 3
2012-05-28 22:26:42.418 My App[48426:11f03] *** Assertion failure in -[MPMediaPickerController loadView], /SourceCache/MediaPlayer_Sim/MobileMusicPlayer-1391.72/SDK/MPMediaPickerController.m:86
2012-05-28 22:26:42.419 My App[48426:11f03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to load iPodUI.framework'

Is this some problem in my App/Xcode/iOS Simulator, or does the iOS Simulator simply not support the MPMediaPickerController? If not, any alternatives, besides running it on a physical device?


回答1:


MPMediaPickerController does not work in the Simulator. Apple notes this in the "iPod Library Access Programming Guide" under "Hello Music Player". The note says:

Note: To follow these steps you’ll need a provisioned device because the Simulator has no access to a device’s iPod library.

To prevent the assertion you can always check if you can access the do this in your code (code bellow uses ARC and iOS SDK 5.0).

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

[picker setDelegate:self];
[picker setAllowsPickingMultipleItems:YES];
[picker setPrompt:NSLocalizedString(@"Add songs to play","Prompt in media item picker")];

@try {
    [picker loadView]; // Will throw an exception in iOS simulator
    [self presentViewController:picker animated:YES completion:nil];
}
@catch (NSException *exception) {
    [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Oops!",@"Error title")
                                message:NSLocalizedString(@"The music library is not available.",@"Error message when MPMediaPickerController fails to load") 
                               delegate:nil 
                      cancelButtonTitle:@"OK" 
                      otherButtonTitles:nil] show];
}



回答2:


Also (if using storyboard) you can try it:

- (IBAction)showPicker:(id)sender
{
#if TARGET_IPHONE_SIMULATOR
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"playerTest"
                                                    message:@"Media picker didn't work in simulator, please run this app on device"
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
#else
    [self performSegueWithIdentifier:@"ShowPickerViewSegue" sender:self];
#endif
}



回答3:


MPMediaPickerController now works in the iOS Simulator without any additional code changes (at least as of iOS 8, possibly earlier). Here is a project that can demonstrate it: GVMusicPlayerController.

You will have to prepare the music library in the Simulator by copying the necessary files from an actual device, most importantly the MediaLibrary.sqlitedb database files. If you want to play the files and view artwork, you'll also have to copy the iTunes_Control/Music, Purchases and Artwork folders (found in /var/mobile/Media/). See this question for further details: Can i access iPod Library on simulator?.



来源:https://stackoverflow.com/questions/10792442/runtime-error-when-using-mpmediapickercontroller-in-ios-simulator

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!