2011-11-03 44 views
8

Tôi cần mở một NSSavePanel với thư mục Thư viện người dùng làm thư mục đích. Thông thường, tôi sẽ làm điều này bằng cách nhập ~/Library/ vào [NSSavePanel beginSheetForDirectory].Tìm đường dẫn đến thư mục Thư viện người dùng trong OS X

Tính năng này hoạt động miễn là ứng dụng không được sandboxed. Đối với các ứng dụng hộp cát, điều này sẽ dẫn đến việc NSSavePanel cố gắng truy cập thư mục bên trong "hộp" tài liệu ứng dụng.

Tôi không thể tham chiếu đến /Users/username/Library/ vì tôi không biết người dùng username khi chạy. Vậy làm thế nào để tôi liên kết với con đường này trong ca cao?

+0

Nếu tất cả các bạn muốn làm là tìm thư mục nhà của người dùng xem https://stackoverflow.com/questions/6958448/can-i-get-the-current-users-home-directory-in-a-cocoa-objective-c-application – sashoalm

Trả lời

2

Không chắc chắn nếu điều này sẽ làm việc trên một ứng dụng hộp cát nhưng đây là cách tôi làm điều đó ngay bây giờ. Điều này sẽ trở lại/User/TheirUserName

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

Làm việc như một sự quyến rũ! –

+1

'NSHomeDirectory()' trả về đường dẫn trong sandbox, ít nhất là trên 10.7.4 Tuy nhiên, trong khi đây là phương pháp thích hợp để nhận được một thư mục HOME, đây là cách không đúng để lấy thư mục LIBRARY. Điều gì xảy ra nếu đường dẫn thay đổi? Vui lòng sử dụng giải pháp của JWWalker là 'NSSearchPathForDirectoriesInDomains()'. Lặp lại tất cả các phần tử được trả về bất cứ khi nào có thể. –

0

Điều đó tùy thuộc vào những gì bạn đang cố gắng đạt được.

  • Nếu ứng dụng yêu cầu ứng xử, bạn có thể yêu cầu temporary exception entitlement khi gửi ứng dụng tới Mac App Store. Nhưng sớm hay muộn, bạn sẽ phải tìm một giải pháp để loại bỏ ngoại lệ này.
  • Nếu bạn muốn truy cập dữ liệu đã lưu trước đó trong thư mục ~/Library/, bạn có thể xác định migration strategy để di chuyển dữ liệu vào hộp cát.
+0

Tôi không cần bất kỳ nâng cao quyền lợi để đạt được điều này. Nó là đủ để có đọc/ghi trên hệ thống tập tin, như tôi sử dụng một hộp thoại lưu để thực hiện tiết kiệm thực tế. Tôi đã chạy một bằng chứng về khái niệm này và biết rằng các công trình. Điều tôi cần người dùng làm là lưu một số tệp trong thư mục này. Đó là lý do tại sao tôi cần thư mục thực sự và không chỉ truy cập vào nội dung của nó. Vì vậy, nó không phải là tốt để đưa dữ liệu vào sandbox của tôi hoặc. Vì vậy, tôi cần một số cách để đọc "tên người dùng" của người dùng để có thể tạo đường dẫn đến thư mục Thư viện của mình, như: "~/user/[username]/Library/ –

12

Tôi không chắc chắn như thế nào sandboxing phù hợp với điều này, nhưng bạn có thể tìm thấy thư mục thư viện của người dùng sử dụng:

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); 
Các vấn đề liên quan