David Raijmakers
David Raijmakers

Reputation: 1379

What are the possibilities with sending a Notification in iOS

i want to know what the possibilities are with sending a Notification. Is it possible to send a NSUserDefaults?

I know you can send another viewcontroller.

Like this:

NSUserDefaultsDidChangeNotification is just a notification that is sent out when the defaults are changed. To listen out for it you need this code :

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(defaultsChanged:)  
               name:NSUserDefaultsDidChangeNotification
             object:nil];

This will call the method defaultsChanged: when the notification is fired. You need to implement this method like this :

- (void)defaultsChanged:(NSNotification *)notification {
 // Get the user defaults
NSUserDefaults *defaults = (NSUserDefaults *)[notification object];

// Do something with it
NSLog(@"%@", [defaults objectForKey:@"nameOfThingIAmInterestedIn"]);
}

Upvotes: 0

Views: 254

Answers (2)

Charan
Charan

Reputation: 4946

Well,

Here is a possibility of sending a dictionary through NSNotificationCenter using

- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender userInfo:(NSDictionary *)userInfo

In the class where you are posting it:

NSDictionary *dict;

dict = [NSDictionary dictionaryWithObjectsAndKeys: yourStuff, nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@”someString” object:nil userInfo:dict];

In the class doing the listening:

[[NSNotificationCenter deHaultCenter] addObserver:self selector:@selector(someMethod: ) name:@”someString” object:nil];
…
- (void)someMethod:(NSNotification *)notification {
NSDictionary *tmp = notification.userInfo;
//You could access notification.object here too
}

EDIT: But usually while receiving Push Notifications from server you have a method called:

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{
for (id key in userInfo) {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    }
}

In this method you can get the payload as a Dictionary as well

Upvotes: 2

elp
elp

Reputation: 8131

you can't send NSUserDefault, but you can send entire Class (Archiver/Unarchiver) data converted in base64 for example. And next create your NSUserDefault from NSData.

I wrote an article to exchange data using base64 with applications and use it.

http://www.albertopasca.it/whiletrue/2012/04/objective-c-share-classes-objects-apps/

hope this helps.

Upvotes: 0

Related Questions