向对象发送消息

时间:2010-09-21 09:53:10

标签: iphone objective-c

我对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 个答案:

答案 0 :(得分:1)

最可能的是,您的ViewController不知道mPlayer对象。您有两种选择:

  • 使mPlayer成为您的app delegate的属性
  • 使mPlayer成为视图控制器子类的属性,并在创建时将其设置为mPlayer

在你的appdelegates声明中,执行:

@property(nonatomic, retain) MPMusicPlayerController *mPlayer;

在你的appdelegates实现中,执行:

@synthesize mPlayer;

在你的viewcontroller中,执行:

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