Это на Snow Leopard или вы хотите сохранить совместимость с 10.2+?Если вы не можете поддерживать обратную совместимость, вы можете выделить код, который применяет обновления к другому методу, и вызвать его, используя performSelectorOnMainThread:withObject:waitUntilDone:
В качестве альтернативы, если вы предпочитаете играть с новыми игрушкамии чтобы ваш код был более читабельным (т. е. сводить количество методов к минимуму), вы можете сделать это в линии, используя блоков и Grand Central Dispatch .Может оказаться достаточным что-то вроде следующего:
// 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];
});
Преимущество этого состоит в том, что вам не нужно преобразовывать код в шаблон передачи одного объекта в отдельный метод.