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