Close NSAlert after some time using Timer

Discussion in 'Mac Programming' started by Tejashree, Jun 15, 2009.

  1. macrumors newbie

    Tejashree

    Joined:
    Feb 23, 2009
    #1
    Hi,
    I want to close a alert Window (NSAlert) after specific period of time if user
    does not click on any of the buttons.
    Is there a way to set up a NSTimer to close the Alert Panel after 10 secs.

    I am doing following thing and its working. But I know this wrong way to do this.
    ..........................................
    NSAlert *alert = [[[NSAlert alloc] init] autorelease];
    [alert addButtonWithTitle: @"OK"];
    [alert setMessageText: @"Attention!!! This a critical Alert."];
    [alert setAlertStyle: NSInformationalAlertStyle];

    NSTimer *myTimer = [NSTimer timerWithTimeInterval: 5
    target:self
    selector: @selector(killWindow:)
    userInfo:nil
    repeats:NO];

    [[NSRunLoop currentRunLoop] addTimer:myTimer forMode:NSModalPanelRunLoopMode];

    int choice = 0;
    choice = [alert runModal];
    if(choice != 0)
    [myTimer invalidate];
    ..........................................
    -(void) killWindow:(NSTimer *) theTimer
    {
    NSLog(@"killWindow");
    [[alert window] close];
    }
    ..........................................


    Can anyone please suggest the best way to do this.

    Thanks,
    Tejashree.
     
  2. macrumors 601

    HiRez

    Joined:
    Jan 6, 2004
    Location:
    Western US
    #2
    Why do say you know it's wrong? You said it works, right? Only thing I can see is you set of for 5 seconds when you said you wanted 10.
     
  3. macrumors 6502a

    mathcolo

    Joined:
    Sep 14, 2008
    Location:
    Massachusetts
    #3
    Yeah, if it's working for you then I wouldn't bother changing it. Despite that, that's how I'd do it; an NSTimer controlling NSAlert.

    Sometimes you have to just let code be code :D
     
  4. macrumors newbie

    Joined:
    Jan 10, 2013
    #4
    I used this same code, but when I try to close with a timer, the rest of my app freezes. Also, if I try to do NSApp.stopModal to stop running Modal, the app crashes. Any ideas on the correct way to do this?
     
  5. macrumors G5

    gnasher729

    Joined:
    Nov 25, 2005
    #5
    I'd try abortModal instead of stopModal, that's what the documentation says. And your memory management seems dubious. [autorelease] should release the alert before the next round of the run loop, so by the time the timer fires, the alert should be gone. What does the static analyzer think of your code?
     

Share This Page