Objective c 上次使用Cocoa打开的文档
有没有办法获取应用程序最后打开的文件?我知道使用LSSharedFileListCreate可以获取用户的全局最新文档数组,但我想知道是否可以使用cocoa或objective-c获取特定应用程序(如Xcode)的最新文档。您可以使用Objective c 上次使用Cocoa打开的文档,objective-c,cocoa,Objective C,Cocoa,有没有办法获取应用程序最后打开的文件?我知道使用LSSharedFileListCreate可以获取用户的全局最新文档数组,但我想知道是否可以使用cocoa或objective-c获取特定应用程序(如Xcode)的最新文档。您可以使用-[NSDocumentController recentDocumentURLs],它检索最近打开的文档的URL数组: NSArray *array = [[NSDocumentController sharedDocumentController] recent
-[NSDocumentController recentDocumentURLs]
,它检索最近打开的文档的URL数组:
NSArray *array = [[NSDocumentController sharedDocumentController] recentDocumentURLs];
您可以使用
-[NSDocumentController recentDocumentURLs]
,它检索最近打开的文档的URL数组:
NSArray *array = [[NSDocumentController sharedDocumentController] recentDocumentURLs];
我认为除了你自己的应用程序之外,没有一个公共API可以获取应用程序的最新文档。最近的文件保存为
~/Library/Preferences
中的plists,因此您可以直接读取这些文件
但是请注意,这些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);
}
}
当然,这在沙盒应用程序中不起作用。我认为除了您自己的应用程序之外,没有公共API可以获取应用程序的最新文档。最近的文件保存为
~/Library/Preferences
中的plists,因此您可以直接读取这些文件
但是请注意,这些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);
}
}
当然,这在沙盒应用程序中不起作用。我知道
-[NSDocumentController-recentdocumenturl]
将返回正在运行的应用程序的最新文档,但是否有方法指定要从哪个应用程序获取最新文档,是否要获取Xcode的最新文档?否。您唯一的选择是在LSSharedFileList中,即使如此,它也只适用于所有用户的最新文件。对不起,误会了;只有从你的评论中我才知道你真正想要什么。哦,好的,我明白了。感谢您提供的信息。可能有一种方法可以做到这一点,即打开应用程序的首选项文件。同样,如果您尝试这样做,可能会遇到沙箱问题。我知道-[NSDocumentController recentdocumenturl]
将返回正在运行的应用程序的最新文档,但是否有方法指定要从哪个应用程序获取最新文档,是否要获取Xcode的最新文档?否。您唯一的选择是在LSSharedFileList中,即使如此,它也只适用于所有用户的最新文件。对不起,误会了;只有从你的评论中我才知道你真正想要什么。哦,好的,我明白了。感谢您提供的信息。可能有一种方法可以做到这一点,即打开应用程序的首选项文件。再说一次,如果你试着这么做,可能会有沙箱问题需要解决。这正是我想要的。谢谢!这正是我要找的。谢谢!