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 EAN 값을 업데이트해야합니다. I.E.

- (void) onAppSettingsChanged:(NSNotification *)notification { 
  NSLog(@"Settings was changed"); 
    if (!myBoolToIndicateProcessing) { 
   //Create the thread 
     myBoolToIndicateProcessing = YES; 
   [NSThread detachNewThreadSelector:@selector(loadPList) toTarget:self withObject:nil]; 
    } 
} 

그런 다음 재로드가 완료되면 BOOL을 다시 NO로 설정하십시오.

+0

누군가가 올바르게 서식을 지정할 수 있으면 많은 의무가 있습니다. 나는 내 아이폰에있어. – CodaFi

+0

BOOL 값을 업데이트하는 예를 들어 주시겠습니까? –

+0

나는 그랬다. 코드에서 YES로 설정했습니다. – CodaFi

관련 문제