发送消息给对象

问题描述:

我对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方式工作。

干杯,

理查德

大多数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