所以,伙计们,我上周一直在努力让这个工作起来。
我有一个应用程序,我需要一个UISwitch来打开本地通知。
开关状态的标准是关闭的,但是当警报开启时我需要在负载时更改它。
我已经尝试过scheduledLocalNotification,我尝试了一个BOOL,我试图设置int isOn,当它打开时为1,当它关闭时为0,似乎没有什么对我有用。
我使用的if循环在ViewDidLoad中,如下所示:
if (isAlarmOn == 1) {
NSLog(@"You have notifications");
[setAlarm setOn:YES];
}
else{
NSLog(@"You have no notifications");
[setAlarm setOn:NO];
}
无论我尝试使用哪种策略,我似乎都无法工作,希望我能从你的家伙那里得到一些帮助。
更多代码:
我的setAlarm的代码
- (IBAction)setAlarm:(id)sender {
NSArray *notificationArray=[[UIApplication sharedApplication] scheduledLocalNotifications];
if (setAlarm.on) {
[alarmStatus setText:@"Alarmen er tændt"];
//Metode til at undersøge om klokken før eller efter officiel solned
NSTimeInterval checkTime = [[astronomicalCalendar sunset] timeIntervalSinceDate:[NSDate date]];
NSLog(@"Alarmen er tændt");
if (checkTime >= 0) {
[self scheduleNotificationToday];
}
else{
[self scheduleNotificationTomorrow];
}
NSLog(@"antal alamer %@", notificationArray);
isAlarmOn = 1;
}
else {
//Metode til at slette alle notifikationer
[[UIApplication sharedApplication] cancelAllLocalNotifications];
NSLog(@"Alarmen er slukket");
NSLog(@"antal alamer %@", notificationArray);
isAlarmOn = 0;
}
}
我的UILocalNotification代码
- (void)scheduleNotificationToday {
Class cls = NSClassFromString(@"UILocalNotification");
if (cls != nil) {
//Just some stuff determine which time to alert on.
UILocalNotification *notif = [[cls
alloc] init];
notif.fireDate = [gregorian dateByAddingComponents:traekFraDag toDate:[astronomicalCalendar sunset] options:0];
notif.timeZone = [NSTimeZone defaultTimeZone];
notif.alertBody = @"Nu går solen snart ned";
notif.alertAction = @"Show me";
notif.soundName = @"Waterline.caf";
notif.applicationIconBadgeNumber = 1;
[[UIApplication sharedApplication] scheduleLocalNotification:notif];
}
}
请告诉我您是否希望看到代码的其他部分
答案 0 :(得分:1)
您需要发布更多代码,以便更好地了解这些变量是什么以及您的问题实际上是什么,但我认为您可能正在寻找:
[setAlarm setOn:YES animated:YES];
和
[setAlarm setOn:NO animated:YES];
..如果setAlarm是您的交换机名称??
答案 1 :(得分:1)
确保setAlarm
确实指向开关,即它不是零并且它不指向其他开关。请为您的变量选择其他名称! ; - )
此外,请确保您没有-viewWillAppear
中的代码或其他一些在-viewDidLoad
之后调用的方法来重置交换机的值。实际上,您可能希望将开关和其他UI元素设置为-viewWillAppear
。
答案 2 :(得分:0)
但每次应用从内存中卸载时,uiswitch会显示 默认状态(关闭)
您没有将交换机的状态存储在任何持久存储中。这就是为什么它总是显示为关闭应用程序退出(为您的类调用dealloc)。
如果您想保存开关状态,即使应用程序不在内存中,您也需要在某处保存该值。如果您愿意,可以使用NSUserDefaults
。