• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: NSRunAlertPanel, Correct Usage
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSRunAlertPanel, Correct Usage


  • Subject: Re: NSRunAlertPanel, Correct Usage
  • From: "digital.pardoe" <email@hidden>
  • Date: Wed, 6 Sep 2006 18:34:52 +0100

Thanks, that's just what I was looking for. I will rename the buttons as it does indeed seem more appropriate to more obviously inform the user. I was just worried that the text may cause the buttons in the dialog box to be rather large and look unsightly.

Thanks Again,
Alex

On 6 Sep 2006, at 18:10, Sean Murphy wrote:


On Sep 6, 2006, at 12:03 PM, digital.pardoe wrote:

I wish to have my application receive a users response on the very first run of an application. I found the code that provided me with a way to do this in the Sparkle updater framework and have implemented it so that it works successfully;

NSNumber *defaultsVar = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyDefault"];
if (!defaultsVar)
{
defaultsVar = [NSNumber numberWithBool:NSRunAlertPanel (SULocalizedString(@"Enable control?"), [NSString stringWithFormat:SULocalizedString(@"Would you like control to be enabled?")], SULocalizedString(@"Yes"), SULocalizedString(@"No"), nil) == NSAlertDefaultReturn];


[[NSUserDefaults standardUserDefaults] setObject:defaultsVar forKey:@"MyDefault"];
}


Essentially I want to remove the references to the 'Sparkle' method;

SULocalizedString

I have read the documentation for NSRunAlertPanel, looked at other examples and tried a few different ways (probably wrong) of implementing the strings but they never compile. Even with the above I get the error 'makes pointer from integer without a cast'.

Could someone advise me as how to correct this, or how to correctly implement it to perform what I would like it to do?

In the Sparkle framework code, Andy is using SULocalizedString() to return an NSString which, unsurprisingly, is a localized value for the supplied argument. So, you can remove references to SULocalizedString and just replace them with a standard NSString object. Looking at the documentation for NSRunAlertPanel shows exactly what type of parameters/return values this function has:


int NSRunAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...)

You can provide an NSString constant anywhere an NSString object is required, meaning your code can be as simple as this:

NSNumber *defaultsVar = [NSNumber numberWithBool:NSRunAlertPanel (@"Enable control?", @"Would you like control to be enabled?", @"Yes", @"No", nil) == NSAlertDefaultReturn];

NSRunAlertPanel is used as an inline function here, as part of an expression which compares the return value of the alert panel to NSAlertDefaultReturn, which is just an enum'd integer (NSRunAlert panel's return type, from the above documentation). The entire expression is then stored as a an NSNumber and inserted into the defaults. The next time this method is called, it checks the user defaults for this key, and if implemented, uses the value it was set to.

I'd also encourage you to consider a few more points which will make your Cocoa app better in the long run.. First, it is helpful (and more Cocoa-like) to give variables very clear names, instead of generic descriptions such as defaultsVar (maybe shouldEnableControl would be a better choice here.) Second, the infamous "Yes, No, Cancel" type dialogs are discouraged and out of place on Mac OS X. They force a user to read the entire alert messsage. The dialog you present would offer a better user experience, and make it clear what action each button is actually performing, if the they were labeled with verbs such as "Enable Control" and "Don't Enable Control." This attentiveness to user- experience (and code style) demonstrate 'paying attention to detail', which is a trait that exemplifies Mac software as a whole.

References:

Apple Human Interface Guidelines:
<http://developer.apple.com/documentation/UserExperience/Conceptual/ OSXHIGuidelines/index.html>


Cocoa Coding Style
<http://developer.apple.com/documentation/Cocoa/Conceptual/ CodingGuidelines/index.html>


Scott Stevenson's Cocoa Style for Objective-C
<http://cocoadevcentral.com/articles/000082.php>
<http://cocoadevcentral.com/articles/000083.php>

Hope that helps..

-Sean

_______________________________________________ Do not post admin requests to the list. They will be ignored. Cocoa-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
References: 
 >NSRunAlertPanel, Correct Usage (From: "digital.pardoe" <email@hidden>)
 >Re: NSRunAlertPanel, Correct Usage (From: Sean Murphy <email@hidden>)

  • Prev by Date: coredata 80 KVO problem
  • Next by Date: Re: Unconventional memory leak problem
  • Previous by thread: Re: NSRunAlertPanel, Correct Usage
  • Next by thread: CoreData issue
  • Index(es):
    • Date
    • Thread