2013-01-24 1 views
0

마지막으로 열었던 응용 프로그램의 파일을 가져 오는 방법이 있습니까? LSSharedFileListCreate를 사용하면 사용자의 전체 최근 문서 배열을 얻을 수 있지만 코코아 또는 objective-c를 사용하여 Xcode와 같은 특정 응용 프로그램에 대한 최신 문서를 가져올 수 있는지 궁금합니다.코코아를 사용하여 마지막으로 열린 문서

답변

2

을 내가 자신 이외의 다른 응용 프로그램의 최근 문서를 취득하기위한 공개 API가 있다고 생각하지 않습니다. 최근 파일은 ~/Library/Preferences에 plists로 저장되므로 직접 읽을 수 있습니다.

그러나 이러한 plists의 형식은 향후 OS 업그레이드시 변경 될 수 있으므로 이상적으로 의존해서는 안됩니다.

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); 
    } 
} 

이 물론 샌드 박스 응용 프로그램에서 작동하지 않습니다 :

여기에 엑스 코드의 최근 문서를 읽고에 대한 예입니다.

+0

이것이 내가 원하는 것입니다. 고마워요! – user1998511

1

당신은 가장 최근에 열었던 문서의 URL의 배열을 검색 -[NSDocumentController recentDocumentURLs]을 사용할 수 있습니다

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

'- [NSDocumentController recentDocumentURLs]'이 (가) 실행중인 응용 프로그램에 대한 최근 문서를 반환하지만 Xcode의 최신 문서를 얻는 것처럼 최근 문서를 가져올 응용 프로그램을 지정하는 방법이 있습니까? – user1998511

+0

아니요. 유일한 옵션은 LSSharedFileList에 있으며, 심지어 모든 사용자의 가장 최근 파일에만 적용됩니다. 오해해서 유감스럽게 생각합니다. 그것은 내가 당신이 정말로 원했던 것을 알아 냈다는 귀하의 의견에 의해서입니다. – trudyscousin

+0

오, 알았어. 정보 주셔서 감사합니다. – user1998511

관련 문제