2012-06-06 3 views
0

Я использую NSNotification для отправки уведомления, когда переключатель изменен, чтобы начать обновление аннотаций на карте. Моя проблема в том, что у меня есть 8 переключателей, и когда пользователь меняет положение нескольких переключателей, много раз обновляйте карты. Как ограничение на одно уведомление?Есть ли способ ограничить NSNotification?

- (IBAction)saveSwitch:(id)sender 
{ 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"MyAppSettingsChanged" object:self userInfo:nil]; 


    NSUserDefaults *defs1 = [NSUserDefaults standardUserDefaults]; 
    [defs1 setBool: blackSwitch.on forKey: @"blackKey"]; 

    NSUserDefaults *defs2 = [NSUserDefaults standardUserDefaults]; 
    [defs2 setBool: greenSwitch.on forKey: @"greenKey"]; 

    NSUserDefaults *defs3 = [NSUserDefaults standardUserDefaults]; 
    [defs3 setBool: purpleSwitch.on forKey: @"purpleKey"]; 

    NSUserDefaults *defs4 = [NSUserDefaults standardUserDefaults]; 
    [defs4 setBool: orangeSwitch.on forKey: @"orangeKey"]; 

    NSUserDefaults *defs5 = [NSUserDefaults standardUserDefaults]; 
    [defs5 setBool: blueSwitch.on forKey: @"blueKey"]; 

    NSUserDefaults *defs6 = [NSUserDefaults standardUserDefaults]; 
    [defs6 setBool: redSwitch.on forKey: @"redKey"]; 

    NSUserDefaults *defs7 = [NSUserDefaults standardUserDefaults]; 
    [defs7 setBool: darkblueSwitch.on forKey: @"darkblueKey"]; 

    NSUserDefaults *defs8 = [NSUserDefaults standardUserDefaults]; 
    [defs8 setBool: yellowSwitch.on forKey: @"yellowKey"]; 

    [[NSUserDefaults standardUserDefaults] synchronize]; 

} 

В другой точке зрения

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAppSettingsChanged:) name:@"MyAppSettingsChanged" object:nil]; 

} 

Обновление аннотаций

- (void) onAppSettingsChanged:(NSNotification *)notification { 

    NSLog(@"Settings was changed"); 

    //Create the thread 
    [NSThread detachNewThreadSelector:@selector(loadPList) toTarget:self withObject:nil]; 

} 

ответ

3

Вы должны обновить некоторое значение BOOL ЕАН, чтобы указать, что вы не в настоящее время обработки обновления, и действовать соответствующим образом. И.Е.

Затем, когда перезагрузка закончена, установите BOOL в положение NO.

+0

Я был бы очень признателен, если бы кто-то мог отформатировать это правильно. Я нахожусь на своем iPhone. – CodaFi

+0

Можете ли вы привести мне пример обновления значения BOOL? –

+0

я сделал. Я установил его в код YES. – CodaFi