Ошибка выполнения при использовании MPMediaPickerController в iOS Simulator
При попытке запустить приложение с помощью MPMediaPickerController
на симуляторе iOS выполняется следующее.
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'
Это какая-то проблема в моем симуляторе App/Xcode/iOS, или iOS Simulator просто не поддерживает MPMediaPickerController
? Если нет, то какие-либо альтернативы, помимо запуска его на физическом устройстве?
Ответы
Ответ 1
MPMediaPickerController не работает в симуляторе. Apple отмечает это в " Руководство по программированию доступа к библиотеке iPod" в разделе "Привет музыкальный плеер". В записке говорится:
Примечание. Чтобы выполнить следующие действия, вам понадобится подготовленное устройство, потому что Симулятор не имеет доступа к библиотеке устройств iPod.
Чтобы предотвратить утверждение, вы всегда можете проверить, можете ли вы получить доступ к этому в своем коде (ниже приведен код ARC и 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
Также (при использовании раскадровки) вы можете попробовать:
- (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
теперь работает в iOS Simulator без каких-либо дополнительных изменений кода (по крайней мере, с iOS 8, возможно, раньше). Вот проект, который может его продемонстрировать: GVMusicPlayerController.
Вам нужно будет подготовить музыкальную библиотеку в Simulator, скопировав необходимые файлы с реального устройства, а самое главное - файлы базы данных MediaLibrary.sqlitedb
. Если вы хотите воспроизвести файлы и просмотреть обложку, вам также придется скопировать папки iTunes_Control/Music
, Purchases
и Artwork
(найдены в /var/mobile/Media/
). См. Этот вопрос для получения дополнительной информации: Могу ли я получить доступ к библиотеке iPod на симуляторе?.