Я работаю над подклассом AVPlayer
, чтобы я мог создать метод, который skipsBackwards
в очереди музыки. Я хочу создать полнофункциональный музыкальный проигрыватель, который использует музыку от пользователей iPod. Так что это означает, что AVAudioPlayer
отсутствует, а также MPMusicPlayerController
. Также Core Audio пугает меня, так что я надеюсь пока держаться подальше от этого.
Я рассмотрел возможность использования категорий для расширения класса AVPlayer
, но мне нужно, чтобы в моем подклассе была переменная класса для хранения MPMediaItemCollection
, поэтому я считаю, что имеет смысл использовать подкласс вместо добавления категории.
Вот мое исключение
! [Введите описание изображения здесь] [1]
Вот мой appDelegate-код, в котором я настраиваю AVPlayer
, который подклассами является SWPlayer
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
#import "SWPlayer.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic,retain)SWPlayer *bookPlayer;
@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Setup AudioSession
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
// Allow the audio to mix with other apps (necessary for background sound)
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);
//Grab some Songs to Test with
MPMediaQuery *query = [MPMediaQuery songsQuery];
NSArray *collection = [query items];
//Setup bookPLayer to Test
MPMediaItem *item = [collection objectAtIndex:5];
NSLog(@"%@",[item valueForProperty:MPMediaItemPropertyTitle]);
NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];
self.bookPlayer = [[SWPlayer alloc]initWithURL:url];
[bookPlayer play];
[bookPlayer skipForwards];
return YES;
}
Вот мой самый базовый подкласс ...
#import <AVFoundation/AVFoundation.h>
#import <MediaPlayer/MediaPlayer.h>
@interface SWPlayer : AVPlayer
@property(nonatomic,retain)MPMediaItemCollection *mediaItemCollection;
-(void)skipForwards;
-(void)skipBackwards;
@end
#import "SWPlayer.h"
@implementation SWPlayer
@synthesize mediaItemCollection;
-(void)skipForwards{
NSLog(@"SWPlayer called skipForward method");
}
-(void)skipBackwards{
NSLog(@"SWPlayer called skipBackward method");
}
@end
Музыка воспроизводится с использованием моего подкласса AVPlayer
. Проблема в том, что как только я вызываю skipForward
метод SWPlayer
, я получаю нераспознанную ошибку селектора, и приложение вылетает. Что мне здесь не хватает?