Hello Cocoa-Meisters,

My Document-based OS X program is parsing huge ASCII data files in an 
NSOperationQueue, and then displays the data in a graph. 

It works, however I've seen 2 different approaches to update the User-Interface 
(UI) after the NSOperation has finished (please check code below):

1. With KVO in a Controller object: Observing the NSOperation's "isFinished" 
value and then in observeValueForKeyPath:ofObject:change:context:
    update the UI (graph display) on the main thread with  
performSelectorOnMainThread:withObject:waitUntilDone

2. No KVO: in NSOperation the UI is updated after the parsing is done, by 
calling the delegate again with
    performSelectorOnMainThread:withObject:waitUntilDone

I've tested both approaches but can't decide which one is the most correct / 
best, or what are the benefits of using one approach or another ?

Any suggestions or help is greatly appreciated..

Regards,

Gilles


Some code snippets here:

//-----------------------------------------------
// 1. With KVO in a Controller object
//-----------------------------------------------

MyController.m
...
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
change:(NSDictionary *)change context:(void *)context
{
....
    // Update the User-Interface and graph view
    if ( [keyPath isEqual:@"isFinished"] && asciiParserOperation == object )
    {            ...    
            [self 
performSelectorOnMainThread:@selector(operationAsciiParsingDone:) 
withObject:[asciiParserOperation parsedFile] waitUntilDone:NO];
        }
....
}

//-----------------------------------------------
// 2. NSOperation with delegate
//-----------------------------------------------

-(void)main
{               
        @autoreleasepool {
        // Do the parsing here
                parsedAscii = [[AsciiParser alloc] 
initWithContentsOfString:myAsciiString]
        
             // Update the User-Interface and graph view via delegate
             if( self.delegate && [self.delegate 
respondsToSelector:@selector(operationAsciiParsingDone:)] )
            {
                [(NSObject*)delegate 
performSelectorOnMainThread:@selector(operationAsciiParsingDone:)
                                           withObject:[self parsedAscii]  
waitUntilDone:NO];
            }
        }      
        .....

}






_______________________________________________

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