2010-09-21 220 views
1

我對Objective C很新,但事情進展順利。但是,我想我錯過了一個關於如何創建和發送對象的關鍵概念。我希望有一個人可以幫助我。發送消息給對象

我正在創建一個簡單地創建MPMusicPlayer的iPhone應用程序,並開始播放歌曲中的歌曲。

我創建的AppDelegate的音樂播放器(myPlayer)是這樣的...

- (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中創建播放器),但我想了解我必須做些什麼才能使其以OOP方式工作。

乾杯,

理查德

回答

1

大多數propably,MPlayer的對象是未知的,你的ViewController。有兩種方法供您選擇:

  • 讓MPlayer的應用程序委託
  • 讓MPlayer的視圖控制器子類的屬性,在創建

它設置爲您的Mplayer在屬性您appdelegates聲明,這樣做:

@property(nonatomic, retain) MPMusicPlayerController *mPlayer; 

在你appdelegates實現,這樣做:

@synthesize mPlayer; 

在您的視圖 - 控制,做到:

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

Toastor,這是關於高德和性能都非常好的建議和OP當然需要知道這一切......但是,我認爲它是在一定的誤導性這種情況是因爲OP想要訪問一個單例對象,他可以很容易地從視圖控制器對象中再次使用[MPMusicPlayerController applicationMusicPlayer]。這也許更正式地正確(儘管顯然保持對單身人士的參考在實踐中通常是安全的)。 – Echelon 2010-09-21 14:35:13

+0

乾杯,做了這份工作。 – Shadrax 2010-09-22 13:22:22