2010-09-21 2 views
1

Я довольно новичок в Objective C, но все идет хорошо. Тем не менее, я думаю, что мне не хватает ключевой концепции, связанной с тем, как создаются и передаются сообщения. Я надеюсь, что кто-то может мне помочь.Отправка сообщения объекту

Я создаю приложение для iPhone, которое просто создает MPMusicPlayer и начинает воспроизводить песню из очереди.

создать музыкальный проигрыватель (myPlayer) в AppDelegate как так ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

// Override point for customization after application launch. 

// Add the main view controller's view to the window and display. 
[window addSubview:mainViewController.view]; 
[window makeKeyAndVisible]; 

// instantiate a music player 
MPMusicPlayerController *myPlayer = 
[MPMusicPlayerController applicationMusicPlayer]; 

// assign a playback queue containing all media items on the device 
[myPlayer setQueueWithQuery: [MPMediaQuery songsQuery]]; 

// start playing from the beginning of the queue 
[myPlayer play]; 

return YES; 

}

Это прекрасно работает. Теперь в MainViewController я пытаюсь отправить myPlayer команду, чтобы перейти к следующему треку

[myPlayer skipToNextItem]; 

Однако, когда я пытаюсь скомпилировать я получаю сообщение, что myPlayer в необъявленной.

Что я делаю неправильно? Я могу понять, как я могу исправить это процедурным способом (создав плеер в MainViewController), но я хотел бы понять, что мне нужно сделать, чтобы заставить его работать и работать с ООП.

Приветствия,

Ричард

ответ

1

Наиболее Propably, объект MPLAYER неизвестен вашему ViewController. Есть два варианта для вас:

  • Сделать MPLAYER это свойство вашего приложения делегат
  • сделать MPLAYER свойство вашего зрения контроллера подкласса и установить его на свой MPLAYER при создании

В ваша appdelegates декларация, сделайте следующее:

@property(nonatomic, retain) MPMusicPlayerController *mPlayer; 

В вашей реализации appdelegates, сделайте следующее:

@synthesize mPlayer; 

В вашем ViewController, сделайте следующее:

MPMusicPlayerController *mPlayer = [[[UIApplication sharedApplication] delegate] mPlayer]; 
+1

Toastor, все это большой совет относительно Ивар и свойств, и ОП, конечно, нужно знать все это ... однако, я думаю, что это немного вводит в заблуждение этот конкретный случай, потому что OP хочет получить доступ к одноэлементному объекту, который (а) он может легко сделать, просто используя [MPMusicPlayerController applicationMusicPlayer] снова из объекта контроллера вида. Это, вероятно, также более формально корректно (хотя, очевидно, сохранение на практике единственной ссылки на практике вообще безопасно). – Echelon

+0

Приветствия, которые выполнили эту работу. – Shadrax

Смежные вопросы