> On 25 Apr 2015, at 15:30, Michael Crawford <mdcrawf...@gmail.com> wrote:
> 
> On 4/25/15, Mike Abdullah <mabdul...@karelia.com> wrote:
>> Apple's APIs here are deliberately asynchronous. You need to make your code
>> handle that properly. Don't try to force it to be synchronous.
> 
> Some things need to be synchronous though.  If I'm saving a file, I
> don't want to do anything else unless the file is saved, or perhaps
> the operation is cancelled by the user.

You’ve kind of answered your own questioning there.

UIAlertView provides a modal UI; the user can’t do anything else while it’s 
displayed. So you don’t need to force your code to be synchronous. Take the 
asynchronous code Apple gives you and run with it.

> 
> What's your take on the following?  I found the bit with the runloop
> at stackoverflow.
> 
> + (NSString*) copyFileName: (NSString*) question
>                    withTextPrompt: (NSString*) prompt
> {
>    ModalAlertDelegate *delegate = [[ModalAlertDelegate alloc] init];
> 
>    assert( nil != delegate );
>    assert( 1 == [delegate retainCount] );
> 
>    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: question
>                                                        message: @"Untitled"
>                                                       delegate: delegate
>                                              cancelButtonTitle: @"Cancel"
>                                              otherButtonTitles: @"OK", nil];
>    alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
> 
>    assert( 1 == [alertView retainCount] );
>    assert( 1 == [delegate retainCount] );

Don’t do this. Absolute retain counts are none of your business. Have you 
considered adopting ARC? It would likely make your life a lot easier.
> 
>    [alertView show];
> 
>    while( [alertView isVisible] ){
>        NSRunLoop *rl = [NSRunLoop currentRunLoop];
>        NSDate *today = [[NSDate alloc] init];
> 
>        [rl runUntilDate: today];
>        [today release];
> 
>    }

Don’t do this. There is no need to make the API behave synchronously. Make your 
code asynchronous instead.
> 
>    [alertView release];
> 
>    NSString *result = [delegate.text copy];
> 
>    [delegate release];
> 
>    return result;
> }     
> 
> delegate.text is copied from the UIAlertView's text field in the
> delegate's buttonClickedAtIndex method.
> 
> I don't yet have a way to report that the user cancelled but that will
> be simple to add.  This seems to work as far as it goes.
> 
> -- 
> Michael David Crawford, Consulting Software Engineer
> mdcrawf...@gmail.com
> http://www.warplife.com/mdc/
> 
>   Available for Software Development in the Portland, Oregon Metropolitan
> Area.
> _______________________________________________
> 
> 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/mabdullah%40karelia.com
> 
> This email sent to mabdul...@karelia.com


_______________________________________________

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