2009-05-27 15 views
3

Ich habe meinem Projekt eine Reihe von Ordnern hinzugefügt (mit der Option Vorhandene Datei hinzufügen). Dies führt dazu, dass der Ordnerinhalt in Xcode als blauer Ordner angezeigt wird.Bundles und Dateizugriff

Die folgenden Werke:

NSString *imageName = [NSString stringWithFormat:@"/File-03/images/image-%02d.jpg", imageIndex]; 

return [UIImage imageNamed:imageName]; 

Allerdings möchte ich mit imageWithContentsOfFile so die Bilder wechseln werden nicht zwischengespeichert.

Der folgende Code liefert nil für das Bild:

return [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"/File-03/images/image-%02d.jpg", imageIndex]]; 

Ich habe auch versucht die imageWithContentsOfFile Zugriff auf ein Bündel mit, no go.

Was fehlt mir hier?

Antwort

4

Okay, dachte ich, einen Weg in Code heraus zu bekommen, was ich brauchte:

NSString *dir = [NSString stringWithFormat:@"File-03/images", imageIndex]; 
    NSString *file = [NSString stringWithFormat:@"image-%02d", imageIndex]; 
    NSString *path = [[NSBundle mainBundle] pathForResource:file ofType:@"jpg" inDirectory:dir]; 

    return = [UIImage imageWithContentsOfFile:path]; 

Der Trick, um inDirectory war im Bündel Anruf.

+0

NSString * dir = @ "Datei-03/Bilder"; Sollte ausreichen, nicht? –

6

Um Dateien auf dem iPhone zuzugreifen und zu speichern, empfehle ich, this zu lesen.

Erica Sadun hat auch eine nette shorty über den Zugriff auf Datei in einem App-Bundle geschrieben.

Beachten Sie, dass die Art und Weise, in der Dateien in Xcode organisiert sind, nicht zeigt, wie sie im App-Bundle landen. Am besten wählen Sie das App-Paket im Finder aus und klicken Sie mit gedrückter STRG-Taste und wählen Sie Paketinhalt anzeigen.

+1

Was passiert, wenn ich meinen Inhalt über Paketinhalte anzeigen zum Paket hinzufügen? –

+0

Denken Sie, das wird das Codesign brechen und es wird nicht auf einem Gerät – epatel

1

Das Problem mit Ihrem imageWithContentsOfFile-Code ist, dass Sie davon ausgehen, dass / der Stamm des Bundles ist, wenn es der Stamm des FS ist!

Also, pathForResource:ofType:inDirectory: ist wahrscheinlich der einfachste Weg, den Pfad zu bekommen, den Sie brauchen.

Andernfalls können Sie den Stamm des Bündels abrufen und den Pfaden den Präfix voranstellen.