在viewdidload中的UISwitch状态

时间:2013-02-27 20:49:48

标签: iphone ios uilocalnotification uiswitch

所以,伙计们,我上周一直在努力让这个工作起来。

我有一个应用程序,我需要一个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];
        }
    }

请告诉我您是否希望看到代码的其他部分

3 个答案:

答案 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