5

-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:]単一の NSSearchPathDomainMask を必要とし、単一の URL を返します。(この...appropriateForURL:create:error:部分は、ドキュメントでは少し混乱しています。)

-[NSFileManager URLsForDirectory:inDomains:]domain パラメータのビットマスクを作成し、URL の配列を返すことができます。

これら2つの方法には重複があるようです。ドキュメント、ライブラリ、またはその他のディレクトリを iOS アプリのサンドボックスから取得することが目的の場合、いつどちらを使用する必要がありますか?

4

1 に答える 1

18

Documentsディレクトリ(または他の同様のディレクトリ)にアクセスするための標準的な方法は、次のようなコードです。

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

これは次のことと似ています。

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

主な違いは、最初のパスはNSStringしばらくの間、2番目のパスはパスを提供することですNSURL

他の方法は、次のようにして使用できます。

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

NODocumentsディレクトリは常に存在するため、渡すことができます。YESデフォルトでは存在しないため、アプリケーションサポートディレクトリを渡す必要があります。そして理想的にはnil、メソッド呼び出しがを返した場合に何が起こったかを確認できるように、エラーを渡さないでくださいnil

これらの3つのアプローチのいずれも機能します。パスを文字列にする場合は、1番目を使用します。URLとして使用する場合は、3番目を使用します。複数のドメインを渡す必要がまれにある場合は、2番目を使用します。

于 2012-12-21T01:36:12.823 に答える