On Tue, Feb 24, 2015, at 03:09 AM, Steve Mills wrote:
> Just doing it that way puts up lots of overlapping alert sheets without
> waiting for the user to respond. While that certainly would keep the user
> on their toes, it's not at all right. I've tried using a semaphore to
> wait for the alert (couldn't process user input), running the alert in a
> dispatch_sync block (that just blocked), and a bunch of other stuff.
> 
> Ideas?

This sounds like the kind of thing -[NSDocument
performActivityWithSynchronousWaiting:usingBlock:] was designed for,
though it's a rather tricky API. Here's my stab at it:

- (IBAction)showMyOpenPanel:(id)sender {
  NSOpenPanel *op = /* ... */
  [self performActivityWithSynchronousWaiting:YES usingBlock:^{
    [op beginSheetModalForWindow:self.window completionHandler:^{
      __block BOOL didSuppress = NO;
      for (NSURL *url in op.selectedURLs) {
        if ( ProcessURL(url) == kSomethingBadHappened ) {
          [self performActivityWithSynchronousWaiting:NO usingBlock:{
            if (didSuppress)
              return;
            else {
              [self continueAsynchronousActivityUsingBlock:^{
                NSAlert *alert = /* ... */
                [alert beginSheetModalForWindow:self.window
                completionHandler:^{
                  if (alert.suppressionButton.state == NSOnState)
                    didSuppress = YES;
                }]; 
              }];
            } 
          }];
        } // end kSomethingBadHappened
      }
    }]; // end beginSheetModalForWindow
  }]; // end performActivityWithSynchronousWaiting
}


--Kyle Sluder
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to