发送消息给对象
问题描述:
我对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];
Toastor,这是关于高德和性能都非常好的建议和OP当然需要知道这一切......但是,我认为它是在一定的误导性这种情况是因为OP想要访问一个单例对象,他可以很容易地从视图控制器对象中再次使用[MPMusicPlayerController applicationMusicPlayer]。这也许更正式地正确(尽管显然保持对单身人士的参考在实践中通常是安全的)。 – Echelon 2010-09-21 14:35:13
干杯,做了这份工作。 – Shadrax 2010-09-22 13:22:22