0

アプリケーションの最後に開いたファイルを取得する方法はありますか? LSSharedFileListCreate を使用すると、ユーザーのグローバルな最近のドキュメントの配列を取得できることはわかっていますが、cocoa や Objective-C を使用して、Xcode などの特定のアプリケーションの最近のドキュメントを取得できるかどうか疑問に思っていました。

4

2 に答える 2

3

自分のアプリ以外のアプリの最近のドキュメントを取得するためのパブリック API はないと思います。ただし、最近のファイルは plist として保存される~/Library/Preferencesため、それらを直接読み取ることができます。

ただし、これらの plist の形式は将来の OS のアップグレードで変更される可能性があるため、理想的にはこれに依存しないでください。

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 に答える
3

-[NSDocumentController recentDocumentURLs]最近開いたドキュメントの URL の配列を取得するを使用できます。

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