2012-08-30 5 views
26

Angenommen, ich habe einen beliebigen Satz von Dateien im Haupt-App-Bundle. Ich möchte die Datei-URLs für diese beim Start holen und sie irgendwo speichern. Ist dies mit NSFileManager möglich? Die Dokumentation ist diesbezüglich unklar.Abrufen von Bundle-Dateireferenzen/Pfaden beim Start der App

Hinweis: Ich brauche nur die Datei-URLs, ich muss nicht auf die eigentlichen Dateien zugreifen.

+0

Was ist eine "Dateiverweis"? Pfad? URL? Was? –

+0

Durch Dateiverweis meine ich die Datei URL –

Antwort

59

Sie die URL einer Datei im Hauptbündel

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

bekommen Sie verwenden können schreiben Sie diese URL zum Beispiel eine Eigenschaftslistendatei im Verzeichnis Dokumente:

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]; 

Wenn Sie nicht wissen, die Namen der Dateien, und Sie wollen einfach alle Dateien in dem Bündel aufzulisten, verwenden

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` 
} 
+0

Was, wenn ich die Namen der Dateien nicht kenne, möchte ich einfach alle Dateien dort bekommen? –

+0

@AndrewLauerBarinov dann können Sie die Dokumente von NSFileManager lesen. (Aber sehen Sie die Bearbeitung, jedenfalls ...) –

+0

Danke für die zusätzlichen Informationen! –

2

Ja, würden Sie ihren Weg bekommen:

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"]; 

EDIT: die vollständige Liste der Dateien zu erhalten, die NSFileManager verwenden, erhalten Sie den Pfad zu dem Bündel selbst dann jedes Verzeichnis gehen die Dateien bekommen, so dass URLs und speichern Sie sie irgendwo. Es gibt Unmengen von Code auf SO, wie man ein Verzeichnis dazu laufen lässt. [Sie sollten Ihre Frage um genauer zu sein auf aktualisieren, was Sie wollen, ist dies nicht überhaupt ursprünglich klar gemacht wurde]

+1

Was, wenn ich die Namen der Dateien nicht kenne, möchte ich einfach alle Dateien dort bekommen? –

0

Es gibt eine API auf NSBundle (documentation) auf 10,6 oder iOS 4 ein NSURL direkt zu bekommen, anstatt einen Weg zum NSURL Konstruktor:

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

Es hat auch Varianten, die ein subdirectory nehmen und localizationName, das gleiche wie seine -pathForResource: Äquivalente.

Verwandte Themen