iOS — доступ к текстовой переменной в представлении выбора для использования в имени звука уведомления

У меня есть этот первый метод планирования локального уведомления:

- (void) scheduleLocalNotificationWithDate:(NSDate *)fireDate
{
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.fireDate = fireDate;
    notification.category = @"Alarm";
    notification.soundName = @"Pager.caf";
    [[UIApplication sharedApplication] scheduleLocalNotification: notification];
}

Затем я создал представление выбора, в котором пользователь может выбрать сигнал будильника в списке с помощью этого метода:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
      inComponent:(NSInteger)component
{
    NSString *resultString = _alarmNames[row];
    _alarmToneText.text = resultString;
}

Теперь я хочу отредактировать метод scheduleNotification, чтобы вызвать текстовое значение в представлении выбора, которое равно resultString, и поместить его в уведомление.soundName.

Вот как будет выглядеть код:

notification.soundName = resultString;

person Jongers    schedule 10.09.2015    source источник
comment
какой у Вас вопрос?   -  person user996142    schedule 10.09.2015
comment
Я хочу, чтобы этот код работал, уведомление.soundName = resultString; Мне нужно получить переменную resultString из метода pickerView и использовать ее в моем уведомлении.soundName   -  person Jongers    schedule 10.09.2015
comment
Вы не можете изменить текст уведомления после того, как оно было запланировано. Вы должны изменить подпись своего метода на что-то вроде - (void) scheduleLocalNotificationWithDate:(NSDate *)fireDate andSound:(NSString*)sound и вызвать его из -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row.   -  person user996142    schedule 10.09.2015
comment
Я обновил метод scheduleLocalNotification, но как мне вызвать его из метода pickerView? Извините, что нуб.   -  person Jongers    schedule 10.09.2015
comment
Вы имеете в виду, что сначала вы выберете имя звука, а затем создадите localNotification.? Верно?   -  person Chetan Prajapati    schedule 10.09.2015
comment
Да, выберите имя звука, а затем создайте localNotification.   -  person Jongers    schedule 10.09.2015


Ответы (1)


@interface ViewController ()
{
    NSString *soundName;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    soundName = @"";
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    soundName = _alarmNames[row];
}

- (void) scheduleLocalNotificationWithDate:(NSDate *)fireDate
{
    if (![soundName isEqualToString:@""]) {
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        notification.fireDate = fireDate;
        notification.category = @"Alarm";
        notification.soundName = soundName;
        [[UIApplication sharedApplication] scheduleLocalNotification: notification];
    } else {
        // Show alert for select sound
    }

}

Нет необходимости показывать TextFied для выбранного имени звукового файла. [Это лучшая практика.]

person Chetan Prajapati    schedule 10.09.2015
comment
Спасибо за ответ! Я буду помнить это отныне. - person Jongers; 10.09.2015