0

有没有办法获取应用程序最后打开的文件?我知道使用 LSSharedFileListCreate 可以获取用户的全局最近文档数组,但我想知道是否可以使用 cocoa 或 Objective-c 获取特定应用程序(例如 Xcode)的最近文档。

4

2 回答 2

3

您可以使用-[NSDocumentController recentDocumentURLs],它检索最近打开的文档的 URL 数组:

NSArray *array = [[NSDocumentController sharedDocumentController] recentDocumentURLs];
于 2013-01-24T05:31:35.357 回答
3

我认为没有公共 API 可以获取您自己以外的应用程序的最新文档。不过,最近的文件保存为 plist ~/Library/Preferences,因此您可以直接阅读它们。

但是请注意,这些 plist 的格式可能会随着未来的操作系统升级而改变,因此您最好不要依赖它。

下面是一个阅读Xcode最近文档的例子:

NSString *bundleID = @"com.apple.dt.Xcode";
NSString *prefPath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"Preferences"];
NSString *recentFilesFileName = [bundleID stringByAppendingPathExtension:@"LSSharedFileList.plist"];
NSString *recentFilesPath = [prefPath stringByAppendingPathComponent:recentFilesFileName];

NSArray *recentDocumentItems = [[[NSDictionary dictionaryWithContentsOfFile:recentFilesPath] objectForKey:@"RecentDocuments"] objectForKey:@"CustomListItems"];
for (NSDictionary *recentDocumentItem in recentDocumentItems) {
    NSString *name = [recentDocumentItem objectForKey:@"Name"];
    NSData *bookmarkData = [recentDocumentItem objectForKey:@"Bookmark"];
    NSError *error = nil;
    NSURL *bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmarkData options:NSURLBookmarkResolutionWithoutMounting | NSURLBookmarkResolutionWithoutUI relativeToURL:nil bookmarkDataIsStale:NULL error:&error];
    if (bookmarkURL) {
        NSLog(@"File name: %@", name);
        NSLog(@"URL: %@", bookmarkURL);
    } else {
        NSLog(@"Could not resolve URL for file %@: %@", name, error);
    }
}

这当然不适用于沙盒应用程序。

于 2013-01-24T19:55:06.327 回答