web-dev-qa-db-ja.com

アプリの起動時にバンドルファイルの参照/パスを取得する

Main App Bundleに含まれる任意のファイルセットがあるとします。起動時にファイルのURLを取得し、どこかに保存したいと思います。これはNSFileManagerを使用して可能ですか?その点でドキュメントは不明確です。

注:ファイルのURLのみが必要です。実際のファイルにアクセスする必要はありません。

29

を使用して、メインバンドル内のファイルのURLを取得できます。

NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"];
NSURL *url = [NSURL fileURLWithPath:path];

このURLは、たとえばDocumentsディレクトリのプロパティリストファイルに書き込むことができます。

NSString *docsDir = [NSSearchForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [docsDir stringByAppendingPathComponent:@"Files.plist"];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[url absoluteString] forKey:@"SomeFile.jpeg"];
[dict writeToFile:plistPath atomically:YES];

ファイルの名前がわからず、バンドル内のすべてのファイルをリストするだけの場合は、使用します

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] bundlePath] error:NULL];
for (NSString *fileName in files) {
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:path];
    // do something with `url`
}
66
user529758

またはSwift 4:

        let url = Bundle.main.url(forResource: "FileName", withExtension: ".xyz")
6
Bersaelor

はい、あなたは彼らのパスを取得します:

NSString *path = [NSBundle mainBundle] pathForResource:@"file1" ofType:@"png"];
NSURL *fileURL = [NSURL fileURLWithPath:path]

// save it as any other object or in a dictionary:

[myMutableDictionary setObject:fileURL forKey:@"file1.png"];

編集:ファイルの完全なリストを取得するには、NSFileManagerを使用し、バンドル自体へのパスを取得してから、各ディレクトリを歩いてファイルを取得し、URLを作成して、どこかに保存します。 SOこれを行うためにディレクトリを歩く方法。あなたがしたいことをより具体的にするために質問を更新する必要があります。

2
David H

NSBundleへのパスを渡すのではなく、NSURLを直接取得するために、10.6またはiOS 4で利用可能なNSURLdocumentation )にAPIがあります。コンストラクタ:

- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext;

また、subdirectorylocalizationNameをとるバリアントもあり、-pathForResource:同等。

1
Dov