0

我是 Mac 编程新手,如果我的问题太愚蠢,请原谅我。

我正在编写一个小型应用程序,我需要在其中设置一个目标文件夹。我认为, Firefox 或 Safari 及其“另存为...”对话框所采用的方法不仅仅是使用NSButton “选择文件夹” ,而是一种非常用户友好的方法。

使用NSPopUpButton,可以从用户的收藏夹或上次使用的文件夹中选择一个文件夹。另外我会添加一个最顶部的条目"Choose...",什么会打开一个NSOpenPanel.

我的问题是:如何获取用户最喜欢的文件夹,例如在 Finder 应用程序中显示的文件夹,并NSPopUpButton用它们填充我的文件夹?

下面是它在 Firefox 中的样子:

4

1 回答 1

2

您可以在 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/

对应于:

在此处输入图像描述

于 2012-08-19T14:36:38.480 回答