Как сохранить выбор сегментированного контроля

я добавил сегментированный элемент управления в свой проект, чтобы установить частоту уведомлений (например, ежедневно, еженедельно и т. д.). Я не понимаю, как сохранить выбор пользователя и как настроить уведомление об этом выборе. У меня есть AddController, где пользователь может вставлять напоминания, и в этом контроллере я также хочу установить частоту повторения уведомлений. Код:

@IBAction func salva(sender: UIButton) {
    if fieldNomeMedicina.text.isEmpty &&
        fieldData.text.isEmpty &&
        fieldDosaggio.text.isEmpty{
            //alertView che avverte l'utente che tutti i campi sono obbligatori
            //return

    }

    var therapy = PillsModel(nomeMedicinaIn: fieldNomeMedicina.text,
        dosaggioIn : fieldDosaggio.text,
        dataIn: fieldData.text
        )

    profilo.therapyArra.append(therapy)
    DataManager.sharedInstance.salvaArray()
    DataManager.sharedInstance.detail.pillsTable.reloadData()

    dismissViewControllerAnimated(true, completion: nil)

    let stringDate = fieldData.text//get the time string

    //format date
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy hh:mm" //format style. Browse online to get a format that fits your needs.
    var date = dateFormatter.dateFromString(stringDate)
    //date is your NSdate.


    var localNotification = UILocalNotification()
    localNotification.category = "FIRST_CATEGORY"
    localNotification.fireDate = date
    localNotification.alertBody = "Take your medicine:" + " " + fieldNomeMedicina.text + " " + fieldDosaggio.text
    localNotification.timeZone = NSTimeZone.defaultTimeZone()
    localNotification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1


    UIApplication.sharedApplication().scheduleLocalNotification(localNotification)


}

@IBAction func frequencyControl(sender: UISegmentedControl) {

    if(segmentedControl.selectedSegmentIndex == 0)
    {
        notification.repeatInterval = 0;
    }
    else if(segmentedControl.selectedSegmentIndex == 1)
    {
        notification.repeatInterval = .CalendarUnitDay;
    }
    else if(segmentedControl.selectedSegmentIndex == 2)
    {
        notification.repeatInterval = .CalendarUnitWeekday;

    }
    else if(segmentedControl.selectedSegmentIndex == 3)
    {
        notification.repeatInterval = .CalendarUnitMonth;

    }
    else if(segmentedControl.selectedSegmentIndex == 4)
    {
        notification.repeatInterval = .CalendarUnitMinute;

    }

}


func drawAShape(notification:NSNotification){
    var view:UIView = UIView(frame:CGRectMake(10, 10, 100, 100))
    view.backgroundColor = UIColor.redColor()

    self.view.addSubview(view)

}

func showAMessage(notification:NSNotification){
    var message:UIAlertController = UIAlertController(title: "A Notification Message", message: "Hello there", preferredStyle: UIAlertControllerStyle.Alert)
    message.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

    self.presentViewController(message, animated: true, completion: nil)

}

У меня ошибка: использование неразрешенного идентификатора «уведомление» в func FrequencyControl.


person Elis    schedule 16.08.2015    source источник


Ответы (1)


Ваша проблема в том, что вы создаете localNotification только после того, как пользователь нажмет кнопку (что является хорошим выбором дизайна). Это означает, что вы не можете хранить в нем информацию раньше, но в этом нет необходимости — вы всегда можете спросить UISegmentedControl, каково его текущее значение.

Вам в основном нужно передать этот блок кода:

if(segmentedControl.selectedSegmentIndex == 0)
{
    notification.repeatInterval = 0;
}
...

внутри функции salva. И пока вы это делаете, преобразуйте операторы if в switch — это намного чище. Это будет выглядеть так:

var localNotification = UILocalNotification()
switch segmentedControl.selectedSegmentIndex {
    case 0:
        localNotification.repeatInterval = 0;
    case 1:
        localNotification.repeatInterval = .CalendarUnitDay;
    ...
}
person Glorfindel    schedule 16.08.2015
comment
Привет, Глорфиндель, спасибо за ответ. просто вопрос: мне нужно удалить @IBAction, чтобы переместить код внутри функции salva? - person Elis; 16.08.2015
comment
Вы можете удалить @IBAction - он больше не работает. Если вы это сделаете, обязательно удалите соединение и в раскадровке. - person Glorfindel; 16.08.2015
comment
Привет, Глорфиндель, благодаря вашим указаниям я установил частоту уведомлений, но заметил, что когда я удаляю напоминание из списка, я всегда получаю уведомления. Как установить остановку уведомлений при удалении напоминания из списка? - person Elis; 19.08.2015
comment
Вы можете отменить уведомления с помощью cancelLocalNotification:, но сначала вам нужна ссылка на него. Вы можете получать все уведомления с помощью scheduledLocalNotifications. - person Glorfindel; 19.08.2015
comment
можно ли настроить отмену уведомлений при удалении соответствующей строки напоминания в списке? - person Elis; 19.08.2015
comment
Да, но это довольно сложно. Вам нужно сохранить идентификатор напоминания в словаре userInfo локального уведомления. Возможно, это поможет. Если нет, вы должны опубликовать проблемы, которые у вас есть, в новом вопросе. - person Glorfindel; 19.08.2015