我有这段代码根据收到的本地通知调用不同的NSLog语句:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
if (notification == automaticBackupNotification)
{
NSLog(@"Backup notification received.");
}
else
{
NSLog(@"Did receive notification: %@, set for date:%@ .", notification.alertBody, notification.fireDate);
}
}
我使用此方法在另一个类中安排通知:
- (IBAction)automaticValueChanged {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (automaticSwitch.isOn){
[defaults setValue:@"1" forKey:@"automatic"];
//schedule notification
//Set up the local notification
appDelegate.automaticBackupNotification = [[UILocalNotification alloc] init];
if(appDelegate.automaticBackupNotification){
//Repeat the notification according to frequency
if ([backupFrequencyLabel.text isEqualToString:@"Daily"]) {
appDelegate.automaticBackupNotification.repeatInterval = NSDayCalendarUnit;
}
if ([backupFrequencyLabel.text isEqualToString:@"Weekly"]) {
appDelegate.automaticBackupNotification.repeatInterval = NSWeekCalendarUnit;
}
else {
appDelegate.automaticBackupNotification.repeatInterval = NSMonthCalendarUnit;
}
//Set fire date to alert time
NSCalendar *calendar = appDelegate.automaticBackupNotification.repeatCalendar;
if (!calendar) {
calendar = [NSCalendar currentCalendar];
}
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = 1;
//NSDate *nextFireDate = [calendar dateByAddingComponents:components toDate:[NSDate date] options:0];
//appDelegate.automaticBackupNotification.fireDate = nextFireDate;
appDelegate.automaticBackupNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:20.0];
//Set time zone to default
appDelegate.automaticBackupNotification.timeZone = [NSTimeZone defaultTimeZone];
// schedule notification
UIApplication *app = [UIApplication sharedApplication];
[app scheduleLocalNotification:appDelegate.automaticBackupNotification];
NSLog(@"Backup Fire Date: %@", appDelegate.automaticBackupNotification.fireDate);
}
}
else {
[defaults setValue:@"0" forKey:@"automatic"];
if(appDelegate.automaticBackupNotification){
[[UIApplication sharedApplication] cancelLocalNotification:appDelegate.automaticBackupNotification];
}
}
[defaults synchronize];
}
但是,当应用程序委托收到通知时,它会触发条件的“else”部分。有什么方法可以告诉我们不同的通知吗?或者我做错了什么?
干杯,
Tysin
答案 0 :(得分:6)
NSNotification对象具有调用userInfo的属性。它是一个NSDictionary,您可以在创建通知的位置设置一些值,并在收到通知时检查它们。
答案 1 :(得分:3)
尝试设置userInfo
的{{1}}属性,就像这样,
UILocalNotification
当UILocalNotification触发时,将调用此方法,
NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"YOUROBJECT" forKey:@"TESTKEY"];
YOURNOTIFICATION.userInfo = userDict;
根据您在设置- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
NSDictionary *dict = [notification userInfo];
id obj = [dict objectForKey:@"TESTKEY"];
}
时设置的userInfo
,您可以找出被调用的UILocalNotification
。
答案 2 :(得分:0)
我个人使用通知名称来了解推送或已收到的通知
//add local observer
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mathodCalled:) name:[NSSTring StringWithFormat :@"plop"] object:nil];
...
//push an event manually
[[NSNotificationCenter defaultCenter] postNotificationName:eventName object:[NSSTring StringWithFormat :@"plop"]];
...
- (void)methodCalled :(NSNotification*)aNotification{
if([aNotification.name isEqualToString:@"plop"]){
// do something
}
}