Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 上次使用Cocoa打开的文档_Objective C_Cocoa - Fatal编程技术网

Objective c 上次使用Cocoa打开的文档

Objective c 上次使用Cocoa打开的文档,objective-c,cocoa,Objective C,Cocoa,有没有办法获取应用程序最后打开的文件?我知道使用LSSharedFileListCreate可以获取用户的全局最新文档数组,但我想知道是否可以使用cocoa或objective-c获取特定应用程序(如Xcode)的最新文档。您可以使用-[NSDocumentController recentDocumentURLs],它检索最近打开的文档的URL数组: NSArray *array = [[NSDocumentController sharedDocumentController] recent

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

您可以使用
-[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中,即使如此,它也只适用于所有用户的最新文件。对不起,误会了;只有从你的评论中我才知道你真正想要什么。哦,好的,我明白了。感谢您提供的信息。可能有一种方法可以做到这一点,即打开应用程序的首选项文件。再说一次,如果你试着这么做,可能会有沙箱问题需要解决。这正是我想要的。谢谢!这正是我要找的。谢谢!