Я пытаюсь запустить список поддерживающих приложений. Затем мне нужно подождать, пока эти приложения завершат запуск, прежде чем продолжить выполнение кода. Вот что у меня сейчас:
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
int i = 0;
while (i < [launchApps count]) {
[ws launcApplication: [launchApps objectAtIndex: i]];
++i
}
while (![self appsFinishedLaunching]) {
NSLog(@"loop");
sleep(1);
}
затем позже:
- (BOOL)appsFinishedLaunching
{
BOOL doneLaunching = NO;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int i = 0;
while (i < [launchApps count]) {
NSWorkspace *nws = [NSWorkspace sharedWorkspace];
NSArray *runningApps = [NSArray arrayWithArray:[nws runningApplications]];
for (NSRunningApplication *app in runningApps) {
if ([[app localizedName] isEqualToString:[launchApps objectAtIndex:i]]) {
if ([app isFinishedLaunching]) {
[launchApps removeObjectAtIndex:i];
break;
}
}
}
++i;
}
if ([launchApps count] == 0)
doneLaunching = YES;
[pool drain];
return doneLaunching;
}
Если я запускаю вручную, открываю все приложения в launchApps, я получаю один «цикл» в консоли, и все хорошо. Если я запускаю этот код и позволяю ему запускать приложения, он входит в бесконечный цикл. Кажется, что объекты NSRunningApplications в моей общей рабочей области не обновляются, и я не уверен, что понимаю почему. Чего мне не хватает?