web-dev-qa-db-ger.com

zugriff auf eine Datei über [NSBundle mainBundle] pathForResource: ofType: inDirectory:

Ich habe eine Datei paylines.txt im Ordner TextFiles hinzugefügt, die sich im Resources-Ordner meines iOS-Projekts in Xcode befindet.

Dies ist der Code, den ich für den Zugriff auf die Datei verwende:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"paylines" ofType:@"txt" inDirectory:@"TextFiles"];
NSLog(@"\n\nthe string %@",filePath);

Der Code wird gedruckt:

2011-06-07 14:47:16.251 slots2[708:207] 

the string  (null)
41
Yadnesh

nun, ich fand den Fehler heraus, den ich begangen hatte. Ich fügte dem Projekt eine Gruppe hinzu, anstatt ein reales Verzeichnis für mehr Anweisungen hinzuzufügen.

10
Yadnesh

Ich hatte auch das gleiche Problem .. Die Lösung, die ich gefunden habe, ist (in xcode 4.x):

Gehe zu: Ziel -> "Phasen erstellen" -> "Ressourcen kopieren" Dann füge diese bestimmte Datei hier hinzu. Wenn diese Datei bereits hinzugefügt wurde, löschen Sie sie und fügen Sie sie erneut hinzu.

das Projekt säubern und ausführen. Es klappt. :)

163
Neelam Verma

Versuchen Sie das, es arbeitet für mich. 

NSString *str=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"paylines.txt"];  

Für simulator

NSURL *rtfUrl = [[NSBundle mainBundle] URLForResource:@"paylines" withExtension:@".txt"];
10
Rajneesh071

Wenn ich Dateien ziehe, scheint das Kontrollkästchen "Zu Zielen hinzufügen" standardmäßig deaktiviert zu sein. Wenn ich es nicht ankreuze, dann habe ich das beschriebene Problem. Beheben Sie das Problem, indem Sie die Dateien löschen und sie dann wieder hineinziehen. Achten Sie jedoch darauf, dass Sie "Zu Zielen hinzufügen" ..__ anklicken.enter image description here

10
dawid

Sie müssen lediglich sicherstellen, dass das unten abgebildete Kontrollkästchen aktiviert ist.

 enter image description here

3
RawMean

Versuchen Sie dies in einem XCTest und kurz davor, Ihren Laptop zu zerstören? Dies ist der Thread für Sie: Warum kann Code innerhalb von Komponententests keine Bündelressourcen finden?

3
evanflash

Im Falle von Mac OSX

Gehen Sie zu Ziele -> Erstellungsphasen Klicken Sie auf +, um die Erstellungsphasen für neue Dateien zu kopieren Wählen Sie das Produktverzeichnis und legen Sie die Datei dort ab.

Reinigen Sie das Projekt und führen Sie es aus.

1
megha

Nachdem Sie die Antwort von @Neelam Verma oder die Antwort von @ dawid verfolgt haben, die dasselbe Endergebnis wie die Antwort von @Neelam Verma aufweist, besteht der Unterschied darin, dass die Antwort von @ dawid mit dem Ziehen und Ablegen der Datei in das Xcode-Projekt beginnt und die Antwort von @Neelam Verma mit einem Da die Datei bereits Teil des Xcode-Projekts ist, konnte NSBundle.mainBundle().pathForResource("file-title", ofType:"type") meine Videodatei immer noch nicht finden.

Ich dachte, vielleicht, weil ich meine Datei in einer Gruppe hatte, die im Xcode-Projekt verschachtelt war, dass dies die Ursache war, also habe ich die Videodatei in das Stammverzeichnis meines Xcode-Projekts verschoben, immer noch kein Glück, dies war mein Code:

 guard let path = NSBundle.mainBundle().pathForResource("testVid1", ofType:"mp4") else {
        print("Invalid video path")
        return
    }

Ursprünglich war dies der Name meiner Datei: testVid1.MP4, das Umbenennen der Videodatei in testVid1.mp4 behebte mein Problem, so dass zumindest das Argument ofType string die Groß- und Kleinschreibung berücksichtigt. 

1
Brian Ogden

Gehen Sie zu "Ziel" -> "Erstellungsphasen", wählen Sie Ihr Ziel aus, wählen Sie die Registerkarte "Erstellungsphasen", klicken Sie auf "Erstellungsphase hinzufügen" und wählen Sie "Add Copy Files". Ändern Sie das Ziel in "Produktverzeichnis". Ziehen Sie Ihre Datei in den Abschnitt "Dateien hinzufügen".

1
Hordaric

Wählen Sie Projekt/Bestimmter Ordner -> Rechtsklick -> Dateien zum Projekt hinzufügen -> Wählen Sie die Datei aus, die Sie hinzufügen möchten.

Das hat bei mir funktioniert.

0
YSR fan