On Oct 21, 2014, at 10:59 PM, Gerriet M. Denkmann <gerr...@mdenkmann.de> wrote:

> NSAlert has: - (void)beginSheetModalForWindow:(NSWindow *)sheetWindow
>               completionHandler:(void (^)(NSModalResponse returnCode))handler
> 
> NSModalResponse has three values: Stop, Abort, Continue - none of which bear 
> any resemblance with the buttons: Default, Alternate, Other in my NSAlert.
> 
> Also the actually returned values are not among those in NSModalResponse.
> 
> They look like NSAlertDefaultReturn, NSAlertAlternateReturn instead - but 
> this clearly cannot be the case, as these values are deprecated: "These 
> constants are deprecated in 10.9 and will be formally deprecated in the 
> following release"
> 
> The suggested alternative is NSAlertFirstButtonReturn, etc., which have 
> values, which very much unlike the actual returned values.
> 
> And the header mentions:
> "Note that these return values (i.e. NSAlertFirstButtonReturn  etc. ) do not 
> apply to an NSAlert created via 
> +alertWithMessageText:defaultButton:alternateButton:otherButton:informativeTextWithFormat:,
>  which instead uses the same return values as NSRunAlertPanel.  See 
> NSAlertDefaultReturn, etc. in NSPanel.h"
> 
> Which brings us back to the already deprecated values.
> 
> I am mightily confused.

NSModalResponse is not a proper enum.  It is merely an integer type.  There's 
an enum which outlines some possible values, but not the only values.

If you use 
+alertWithMessageText:defaultButton:alternateButton:otherButton:informativeTextWithFormat:,
 which you shouldn't, the alert will generate return codes 
NSAlertDefaultReturn, NSAlertAlternateReturn, or NSAlertOtherReturn.  This is 
documented in the reference for that method.

If you create the alert using +alloc and -init, as you should, then it will 
generate return codes as documented in the -addButtonWithTitle: method: 
NSAlertFirstButtonReturn, NSAlertSecondButtonReturn, NSAlertThirdButtonReturn, 
NSAlertThirdButtonReturn + n, ….

The values NSModalResponseStop, NSModalResponseAbort, and 
NSModalResponseContinue are for when you run a custom window in modal mode 
using -[NSApplication runModalForWindow:] or 
-beginModalSessionForWindow:/-runModalSession:/-endModalSession:.  The first 
two result from -stopModal and -abortModal, respectively.  The third is when 
-runModalSession: returns to your code to allow it to do some work but needs it 
to continue calling -runModalSession: because the modal session isn't complete 
yet.

There are also NSModalResponseOK and NSModalResponseCancel, 
NSFileHandlingPanelOKButton and NSFileHandlingPanelCancelButton.

Finally, you can use custom codes, as documented in -[NSApplication 
stopModalWithCode:] and -[NSWindow endSheet:returnCode:].  So long as the code 
which calls these methods and the code which handles the result code agree on 
the meaning, you're fine.

Regards,
Ken


_______________________________________________

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