2011-11-03 5 views
8

사용자 라이브러리 폴더를 대상 폴더로하여 NSSavePanel을 열어야합니다. 일반적으로 ~/Library/[NSSavePanel beginSheetForDirectory]에 입력하면됩니다.사용자에게 경로 가져 오기 OS X의 라이브러리 폴더

응용 프로그램이 샌드 박싱되지 않는 한 제대로 작동합니다. 샌드 박스 응용 프로그램의 경우 이것은 NSSavePanel 응용 프로그램 문서 "상자"안의 폴더에 액세스하려고합니다.

런타임에 username 사용자를 모르므로 /Users/username/Library/을 참조 할 수 없습니다. 그렇다면 코코아에서 어떻게 연결해야합니까?

+0

사용자의 집 주소는 https://stackoverflow.com/questions/6958448/can-i-get-the-current-users-home-directory-in-a-cocoa-objective-c-application – sashoalm

답변

2

샌드 박스 응용 프로그램에서 작동하는지 확실하지 않지만 지금 당장은이를 수행하고 있습니다. 이/TheirUserName를/사용자를 반환합니다

-(NSString *)homeDirectory 
{ 
    return NSHomeDirectory(); 
} 
+0

매력처럼 작동합니다. –

+1

'NSHomeDirectory()'는 적어도 10.7.4에서 in-sandbox 경로를 반환하지만, 이것은 HOME 폴더를 얻는 적절한 방법이지만 LIBRARY 폴더를 가져 오는 부적절한 방법입니다. 경로가 변경되면 어떻게됩니까? NSSearchPathForDirectoriesInDomains()의 JWWalker 솔루션을 사용하십시오. 가능할 때마다 반환 된 모든 요소를 ​​반복하십시오. –

0

달성하려는 목표에 따라 다릅니다.

  • 응용 프로그램에서 동작이 필요한 경우 응용 프로그램을 Mac App Store에 제출할 때 temporary exception entitlement을 요청할 수 있습니다. 그러나 조만간이 예외를 제거하는 해결책을 찾아야 할 것입니다.
  • ~/Library/ 폴더에 이전에 저장된 데이터에 액세스하려는 경우 migration strategy을 정의하여 데이터를 샌드 박스로 되돌릴 수 있습니다.
+0

을 참조하십시오. 이것을 달성하기위한 인센티브 인상. 실제 저장을 수행하기 위해 저장 대화 상자를 사용할 때 파일 시스템에서 읽기/쓰기 만 있으면 충분합니다. 나는 이것에 대한 개념 증명을 실행했으며 그 사실을 알고있다. 사용자가해야 할 일은이 폴더에 일부 파일을 저장하는 것입니다. 그래서 실제 폴더가 필요하며 콘텐츠에 액세스 할 수 없습니다. 따라서 샌드 박스에 데이터를 가져 오는 것도 좋지 않습니다. 예 : "~/user/[username]/Library/ –

12

나는 샌드 박싱이에 맞는 방법을 잘 모르겠어요,하지만 당신은 사용하여 사용자의 라이브러리 디렉토리를 찾을 수 있습니다 당신이 원하는 모든 찾을 경우

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);