This sounds like it might be a good case for a proxy. You could create a small 
class that looks something like this:

@implementation MyClass
@synthesize targetWindow;
- (void)forwardInvocation:(NSInvocation *)invocation {
[invocation performSelectorOnMainThread:@selector(invokeWithTarget:) 
withObject:self.targetWindow waitUntilDone:NO];
}
@end

Not as efficient, so it wouldn't be good if these methods are being called a 
lot in a small period of time, but it's a lot less tedious than writing 50 
dummy methods.

Cheers,
Chuck


----- Original Message ----
> From: Jerry Krinock <[EMAIL PROTECTED]>
> To: Cocoa Developers <cocoa-dev@lists.apple.com>
> Sent: Tuesday, November 4, 2008 2:22:35 PM
> Subject: Making a Window Class Invocable from Any Thread
> 
> 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 (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:
> http://lists.apple.com/mailman/options/cocoa-dev/acharlieblue%40yahoo.com
> 
> This email sent to [EMAIL PROTECTED]



      
_______________________________________________

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

This email sent to [EMAIL PROTECTED]

Reply via email to