有没有办法获取应用程序最后打开的文件?我知道使用 LSSharedFileListCreate 可以获取用户的全局最近文档数组,但我想知道是否可以使用 cocoa 或 Objective-c 获取特定应用程序(例如 Xcode)的最近文档。
问问题
1286 次
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 回答