Как заполнить NSPopUpButton любимыми папками пользователя

Я новичок в программировании для Mac, так что простите меня, если мой вопрос слишком глуп.

Я пишу небольшое приложение, где мне нужно установить папку назначения. Я думаю, что вместо того, чтобы просто использовать NSButton "Выберите папку", подход, который используют Firefox или Safari с их диалоговыми окнами "Сохранить как...", очень удобен для пользователя. один.

Использование NSPopUpButton, где можно выбрать папку из избранного пользователя или из последних использованных папок. Кроме того, я бы добавил самую верхнюю запись "Выбрать...", которая открывала бы файл NSOpenPanel.

Мой вопрос: как я могу получить любимые папки пользователя, которые отображаются, например. в приложении Finder и заполнить ими мой NSPopUpButton?

Вот как это выглядит в Firefox: сохранить как диалог


person msal    schedule 19.08.2012    source источник
comment
Почему бы вам не использовать сам NSOpenPanel?   -  person Yuji    schedule 19.08.2012
comment
Я не думаю, что в Finder есть какие-либо методы, AppleEvents или API, которые открывают список избранного и недавнего для других приложений, кроме включения NSOpenPanel, как мудро предложил Юдзи.   -  person Michael Dautermann    schedule 19.08.2012


Ответы (1)


Вы можете найти соответствующие функции в среде Application Services, и вы можете получить список таких элементов:

LSSharedFileListRef favorites = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL);
CFArrayRef snapshot = LSSharedFileListCopySnapshot(favorites, NULL);

CFIndex snapshotCount = CFArrayGetCount(snapshot);
for (CFIndex i = 0; i < snapshotCount; ++i) {
    LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(snapshot, i);
    CFURLRef itemURL = NULL;
    LSSharedFileListItemResolve(item, kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes, &itemURL, NULL);

    NSLog(@"%@", itemURL);
    if (itemURL != NULL) {
        CFRelease(itemURL);
    }
}
CFRelease(snapshot);
CFRelease(favorites);

Когда я запускаю это на своем компьютере, я получаю:

nwnode://domain-AirDrop
file://localhost/Applications/
file://localhost/System/Library/CoreServices/Finder.app/Contents/Resources/MyLibraries/myDocuments.cannedSearch/
file://localhost/Users/dave/
file://localhost/Users/dave/Desktop/
file://localhost/Users/dave/Developer/
file://localhost/Users/dave/Documents/
file://localhost/Users/dave/Downloads/
file://localhost/Users/dave/Dropbox/

Что соответствует:

введите здесь описание изображения

person Dave DeLong    schedule 19.08.2012