2012-12-21 20 views
5

-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:] yêu cầu một NSSearchPathDomainMask duy nhất và trả lại một URL. (Phần ...appropriateForURL:create:error: hơi khó hiểu trong tài liệu.)NSFileManager - URLForDirectory ... hoặc URLForDirectory

-[NSFileManager URLsForDirectory:inDomains:] cho phép bạn tạo mặt nạ bit cho thông số tên miền và trả về một mảng URL.

Dường như với tôi có sự chồng chéo giữa hai phương pháp này. Nếu mục tiêu của tôi là lấy Tài liệu, hoặc Thư viện hoặc thư mục vv từ hộp cát của ứng dụng iOS, khi nào tôi nên sử dụng hộp thư này qua tài khoản khác?

Trả lời

17

Cách thông thường để có được quyền truy cập vào các tài liệu thư mục (hoặc thư mục tương tự khác) là mã như sau:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = paths[0]; 

này tương tự như thực hiện:

NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; 
NSURL *documentsURL = URLs[0]; 

Sự khác biệt chính là đầu tiên cung cấp cho bạn đường dẫn dưới dạng NSString trong khi thứ hai cung cấp cho bạn đường dẫn dưới dạng NSURL.

Các phương pháp khác có thể được sử dụng bằng cách thực hiện:

NSURL *documentsURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; 

Bạn có thể vượt qua NO cho thư mục Documents vì nó luôn luôn tồn tại. Bạn nên vượt qua YES cho thư mục hỗ trợ ứng dụng vì nó không tồn tại theo mặc định. Và lý tưởng bạn không nên vượt qua trong nil cho lỗi để bạn có thể xem những gì đã xảy ra nếu cuộc gọi phương thức trả về nil.

Bất kỳ phương pháp nào trong số ba cách tiếp cận này đều hoạt động. Sử dụng số 1 nếu bạn muốn đường dẫn dưới dạng chuỗi. Sử dụng thứ 3 nếu bạn muốn nó làm URL. Sử dụng thứ 2 nếu bạn có nhu cầu hiếm hoi để chuyển vào nhiều hơn một tên miền.

+4

Từ Tài liệu của Apple: 'Bạn nên xem xét sử dụng các phương pháp NSFileManager URLForDirectory: inDomains: và URLForDirectory: inDomain: properForURL: create: error :. trả lại URL, là định dạng ưa thích.' – edelaney05

+0

Điều đó đúng nếu bạn muốn URL. Nếu bạn muốn đường dẫn như là một NSString, thì những gì tôi đăng là tốt. – rmaddy

+0

@ edelaney05 Xem câu trả lời cập nhật của tôi. – rmaddy

Các vấn đề liên quan