On Apr 4, 2012, at 7:33 PM, Corbin Dunn wrote:

> 
> On Apr 4, 2012, at 9:29 AM, Andreas Grosam <agro...@onlinehome.de> wrote:
> 
>> The problem on Mac OS X in Cocoa Apps is, that there is no alert. The 
>> application also does not stop, or terminate gracefully. The default 
>> behavior of the event loop is to log an error message, and then **continue**.
> 
> No, there is an alert! you just have to turn it on.  From:
> 
> https://developer.apple.com/library/mac/#releasenotes/Cocoa/AppKit.html
> 
> "AppKit now has the ability to report uncaught exceptions. It is controlled 
> by a user default: NSApplicationShowExceptions (YES/NO). The default shipping 
> value is NO. In general, it is recommend that developers set it to YES during 
> development to catch programming errors. Individual applications can 
> automatically turn this on by using [[NSUserDefaults standardUserDefaults] 
> registerDefaults: ...] to register the option on. It can be set with defaults 
> via: 'defaults write com.yourdomain.app NSApplicationShowExceptions YES'. It 
> can also globally be turned on by writing to the global domain."
> 
> --corbin


I'm obviously missing something. I've the following code in a Mac OS X App, 
which I created straight from an Xcode template:

In AppDelegate.m:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSDictionary* defaults = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSNumber numberWithBool:YES], 
@"NSApplicationShowExceptions", 
                              nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults: defaults];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    
    if (test_ == nil) {
        test_ = [[JTTest alloc] initWithString:nil];  // throws if parameter 
string equals nil
    }
}


And in JTTest.m:

- (id)initWithString:(NSString*)string
{
    self = [super init];
    if (self) {
        if (string == nil) {
            
            //NSParameterAssert(string); alternatively
            
            NSException* myException = [NSException
                                        exceptionWithName:@"Invalid Parameter"
                                        reason:@"parameter 'string' is nil"
                                        userInfo:nil];
            @throw myException;
 
        }
        string_ = [string retain];
    }
    return self;
}



The application starts and immediately throws an exception. There is a log in 
the console as expected - but there is NO alert and the app continues.

Additionally, I also enabled the flag NSApplicationShowExceptions in the global 
domain via

$ defaults write -g NSApplicationShowExceptions YES

in the console and launched the test app via

$ open test.app

I'm on Mac OS X, 10. 7.3. There is NO alert.



Andreas

_______________________________________________

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