Is this on Snow Leopard or do you wish to retain compatibility with 10.2+? If you're dead-set on keeping backwards compatibility, you can factor out the code that applies the updates to another method and call it using performSelectorOnMainThread:withObject:waitUntilDone:
Alternatively, if you'd prefer to play with new toys and keep your code more readable (i.e. keep the number of methods to a minimum), you could do it in-line courtesy of blocks and Grand Central Dispatch. Something like the following might suffice:
// The following line is (presumably) executed in your background thread
NSMutableArray *newEntries = [self doSomeHeavyLiftingInBackground];
dispatch_async(dispatch_get_main_queue(), ^{
/* The following lines are executed in the context of your main
thread's run loop. You don't need to mess about with locks as it
will not be executed concurrently with UI updates. */
id<NSTableViewDataSource> dataSource = [self getDataSource];
NSMutableArray *dataSourceInnards = [dataSource whyIsThisMethodHere];
[dataSourceInnards addObjectsFromArray:newEntries];
[dataSource tellTableViewToReload];
});
This has the advantage of not having to contort your code to the pass-a-single-object-to-a-separate-method pattern.