2013-01-24 13 views
0

Existe-t-il un moyen d'obtenir les derniers fichiers ouverts d'une application? Je sais avec LSSharedFileListCreate que vous pouvez obtenir un tableau des documents récents globaux de l'utilisateur mais je me demandais s'il était possible d'obtenir les documents récents pour une application spécifique, comme Xcode, en utilisant le cacao ou l'objectif-c.Derniers documents ouverts utilisant Cocoa

Répondre

2

Je ne pense pas qu'il y ait une API publique pour obtenir des documents récents d'applications autres que le vôtre. Les fichiers récents sont enregistrés en tant que plists dans ~/Library/Preferences, donc vous pouvez simplement les lire directement. Notez toutefois que le format de ces plists peut changer avec les futures mises à niveau du système d'exploitation, vous ne devriez donc pas vous en remettre à cela.

Voici un exemple pour lire les documents récents de 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); 
    } 
} 

Cela ne fonctionnera pas dans une application sandbox bien sûr.

+0

C'est exactement ce que je cherche. Merci beaucoup! – user1998511

1

Vous pouvez utiliser -[NSDocumentController recentDocumentURLs], qui récupère un tableau d'URL des documents les plus récemment ouverts:

NSArray *array = [[NSDocumentController sharedDocumentController] recentDocumentURLs]; 
+0

Je sais '- [NSDocumentController recentDocumentURLs]' retournera les documents récents pour l'application en cours d'exécution, mais existe-t-il un moyen de spécifier de quelle application nous voulons obtenir les documents récents, comme obtenir les documents récents de Xcode? – user1998511

+0

Non. Votre seule option est dans LSSharedFileList, et même alors, c'est seulement pour tous les fichiers les plus récents de l'utilisateur. Désolé pour le malentendu; C'est seulement à partir de votre commentaire que j'ai compris ce que vous vouliez vraiment. – trudyscousin

+0

oh ok, je vois. Merci pour l'info. – user1998511

Questions connexes