• 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: Modal Sheet without Spaghetti?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Modal Sheet without Spaghetti?


  • Subject: Re: Modal Sheet without Spaghetti?
  • From: Jerry Krinock <email@hidden>
  • Date: Tue, 27 Jan 2009 20:35:31 -0800

Thanks for your thoughts, Graham and Michael. My irritation is not so much with the "Do you really want to do this? How?" dialogs, but in presenting errors.

Probably I should have given a more concrete example, as I now have [1]. This simplified code from my real app performs a "sync in" to a document of some data from a source on a remote server. For many good reasons (for example, to facilitate other programmatic entries into this process and to allow subclasses to have different implementations), the -makeConnection method is the sixth function in a call stack that begins with the IBAction syncIn:.

Now, what if the network connection fails? I've been presenting the error in a modal dialog, but as I said in my original post, since this network connection failure only affects the current document, I believe that good UI design would want the error presented in a sheet on the document window instead. However, to do so, my code would become a bloody mess.

So I looked again at -[NSDocument presentError:] and saw that it "does not return until the user dismisses the alert". Whoopee!! But upon trying it, I see that gives a free-standing modal dialog box instead of the sheet that I want. Oh, well.

Apple's dialog-box implementation of -[NSDocument presentError:] leads me to believe that Apple has punted on this problem as well. I guess I'll just continue to use the modal dialog -- until I have a free day to consider this challenge.

Jerry

[1] Note: In real life, these methods are in several different classes, but I mashed them together for easier reading.

- (IBAction)syncIn:(id)sender {
    [self syncInWithDeference:BkmxDeferenceAsk
                  ifNotNeeded:YES] ;
}

- (void)syncInWithDeference:(BkmxDeference)deference
                ifNotNeeded:(BOOL)ifNotNeeded {
    // Some Code Here...
    // ....
    for (...]) {
        [internalizer internalizeWithDeference:deference
                                   ifNotNeeded:ifNotNeeded] ;
    }

    // Some Code Here...
    // ....
}

- (BOOL)internalizeWithDeference:(BkmxDeference)deference
                     ifNotNeeded:(BOOL)ifNotNeeded {
    BOOL ok = YES ;

    if (...) {
        // Some Code Here...
        // ....

        if (needDo) {
            ok = [self ixternalizeStartainer:extore
                                     error_p:&error] ;
            // Some Code Here...
            // ....

        }
    }

    return ok ;
}

- (BOOL)ixternalizeStartainer:(NSObject <Startainer> *)source
                      error_p:(NSError**)error_p {
    // Some Code Here...
    // ....

    BOOL ok = [extore readExternalDoingPrereqs] ;
}

- (BOOL)readExternalDoingPrereqs {
    [self setError:nil] ;
    // Some Code Here...
    // ....

    if (ok) {
        ok = [self makeConnection] ;
    }

    if (ok) {
        // Some Code Here...
        // ....

        ok = [self readExternalNoPrereqs] ;
        // Some Code Here...
        // ....
    }

    return (ok) ;
}

- (BOOL)makeConnection {
    // Some Code Here...
    // ....

    if (....) {
        ok = YES ;
    }
    else {
        while (!done) {
            alertReturn = [SSYAlert runModalDialogTitle:nil
                                                message:msg
                                                buttons:
                           button1,
                           [NSString localize:@"cancel"],
                           nil] ;
            if (alertReturn == NSAlertAlternateReturn) {
                // Some Code Here...
                // ....

                break ;
            }

            // Some Code Here...
            // ....
        }
    }

    return ok ;
}

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Modal Sheet without Spaghetti?
      • From: Michael Ash <email@hidden>
References: 
 >Modal Sheet without Spaghetti? (From: Jerry Krinock <email@hidden>)
 >Re: Modal Sheet without Spaghetti? (From: Graham Cox <email@hidden>)

  • Prev by Date: Re: Modal Sheet without Spaghetti?
  • Next by Date: Re: Configuring a Port-based Input Source -- Part 1
  • Previous by thread: Re: Modal Sheet without Spaghetti?
  • Next by thread: Re: Modal Sheet without Spaghetti?
  • Index(es):
    • Date
    • Thread