I have a class which programatically creates and manipulates an alert window, like NSAlert except it's capable of much more. It exposes about 55 methods, doing stuff like like -setTitle:, -setButtonTitle:, - setProgressAmount:, -removeAllSubviews, -setPopupTitles:, setIconStyle: etc., etc.

Now that I'm learning the coolness of NSOperation, I'd like to be able to invoke these methods from any thread (any NSOperation). In Apple's NSOperationSample sample project, I see one instance of a simple design pattern [1] which provides this any-thread invocability [2]: The name of the method which directly manipulates the UI is prefixed with "mainThread_", and then a second method is provided which simply wraps this first method with an invocation of - performSelectorOnMainThread:withObject:waitUntilDone:. The name of the second method is prefixed with "anyThread_".

This seems like a good solution but before I write wrappers for 55 methods I was wondering if anyone knows a better approach to this problem. (Of course, I'll be looking to consolidate some of my 55 methods.)

Thank you,

Jerry Krinock


[1]  From NSOperationSample:

- (void)mainThread_handleLoadedImages:(NSNotification*)note
{
    if ([myStopButton isEnabled])
    {
        [tableRecords addObject:[note userInfo]];
        [myTableView reloadData];

        // set the number of images found indicator string
        [self updateCountIndicator];
    }
}

// ------------------------------------------------------------------------ // This method is called from any possible thread (any NSOperation) used
//    to update our table view and its data source.
// ------------------------------------------------------------------------
- (void)anyThread_handleLoadedImages:(NSNotification*)note
{
    // update our table view on the main thread
[self performSelectorOnMainThread:@selector(mainThread_handleLoadedImages:)
                           withObject:note waitUntilDone:NO];
}

[2] Yeah, Mail's spellchecker didn't like 'invocability' but I think it's cool.
_______________________________________________

Cocoa-dev mailing list ([email protected])

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to