Запросы с помощью spotlight - PullRequest
0 голосов
/ 31 января 2012

Я работаю над крошечным проектом для LEOPARD (10.5), и я немного новичок в программировании на Objective-C. Я искал некоторые учебники в Интернете, но я все еще в замешательстве! Мне нужно использовать функцию прожектора Leopard для поиска каждого файла .app, установленного на компьютере пользователя. Мне также нужно его имя, путь и значок. Все запрашиваемые данные должны быть сохранены в текстовом файле. Как мне это сделать??? Спасибо!

1 Ответ

2 голосов
/ 06 марта 2012

Определите запрос и наблюдайте завершение запроса.

- (void)searchApplications {
    NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
    query.predicate = [NSPredicate predicateWithFormat:@"kMDItemContentTypeTree == 'com.apple.application'"];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(queryDidFinish:)
                                                 name:NSMetadataQueryDidFinishGatheringNotification
                                               object:query];

    [query startQuery];
}

В функции завершения запроса циклически просматривайте результаты и извлекайте нужные данные.

- (void)queryDidFinish:(NSNotification *)notification {

    NSMetadataQuery *query = (NSMetadataQuery *)[notification object];

    [query stopQuery];

    NSMutableArray *paths = [NSMutableArray array];

    for(NSMetadataItem *mdItem in query.results) {
        NSString *name = [mdItem valueForAttribute:(NSString *)kMDItemDisplayName];
        NSString *path = [mdItem valueForAttribute:(NSString *)kMDItemPath];
        NSImage *icon = [[NSWorkspace sharedWorkspace] iconForFile:path];

        [paths addObject:path];
    }

    [query release];

    [paths writeToFile:@"/tmp/applications.txt" atomically:YES];
}
...