私はサポートするアプリのリストを立ち上げようとしています。私はその後、コードの実行を続ける前に、それらのアプリの起動が完了するまで待たなければなりません。ここで私が今持っているものです。その後、外部アプリを起動して起動するのを待つ
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オブジェクトが更新されていないように見えますが、その理由を理解できていないようです。私は何が欠けていますか? Apple Docs on NSRunningApplicationから
あなたは「待っていますか」「食べていますか?タイトルはちょっと面白いです。 – Blender
タイプミス!編集のためのクリスおかげで:) – Kris