Quantcast
Viewing all articles
Browse latest Browse all 10

NSNotification, UserInfo and Object Methods

When working with an NSNotification object, you’ll want to familiarize yourself the userInfo dictionary, which provides access to any additional objects that may be of interest to the receiver. Understanding the object method may also be helpful if you are using the same notification on more than one object.

userInfo Dictionary

Below I add an observer for MPMoviePlayerContentPreloadDidFinishNotification, which will send a message to the method moviePreloadDidFinish: when a MoviePlayerController object has finished playing:

mp =  [[MPMoviePlayerController alloc] initWithContentURL:movieURL];   [[NSNotificationCenter defaultCenter] addObserver:self                       selector:@selector(moviePreloadDidFinish:)                       name:MPMoviePlayerContentPreloadDidFinishNotification                       object:mp]; }

Here’s how to access and print the userInfo dictionary from the notification object:

- (void) moviePlayBackDidFinish:(NSNotification*)notification  {   NSDictionary *userInfo = [notification userInfo];     NSLog(@"MPMoviePlayerPlaybackDidFinishReasonUserInfoKey: %@",     [userInfo objectForKey:@"MPMoviePlayerPlaybackDidFinishReasonUserInfoKey"]);     ... }

The value of MoviePlayerPlaybackDidFinishReasonUserInfoKey is an NSNumber object which contains an integer value specifying reason the playback finished. The possible range of return values are defined in MPMovieFinishReason, which is an enum type as shown here:

enum {    MPMovieFinishReasonPlaybackEnded,    MPMovieFinishReasonPlaybackError,    MPMovieFinishReasonUserExited }; typedef NSInteger MPMovieFinishReason;

Pulling all this together, you could write something similar to the following to check if the user stopped playback of the movie:

if ([[userInfo objectForKey:@"MPMoviePlayerPlaybackDidFinishReasonUserInfoKey"] intValue] == MPMovieFinishReasonUserExited)     NSLog(@"User stopped playback");
object Method

One more handy method within NSNotification is the method object, which will return the object (as type id) that is associated with the notification. For example, check out the code below that sets up the notification, pay attention to the last parameter mp which is assigned to the object parameter.

mp =  [[MPMoviePlayerController alloc] initWithContentURL:movieURL];   [[NSNotificationCenter defaultCenter] addObserver:self                       selector:@selector(moviePreloadDidFinish:)                       name:MPMoviePlayerContentPreloadDidFinishNotification                       object:mp];

Within the method called by the selector, you can now access the object passed in by querying the object method:

- (void) moviePlayBackDidFinish:(NSNotification*)notification  {   MPMoviePlayerController *mpObject = (MPMoviePlayerController *) [notification object];  ...

mpObject will point to the mp object defined in the previous code block – using the object method you can retrieve a pointer to the object that made the original notification request.


Viewing all articles
Browse latest Browse all 10

Trending Articles