2017-09-23 1 views
0
let myPath = Bundle.main.path(forResource: "Settings", ofType: ".png") 

print(myPath!) 

Warum stürzt es ab, wenn ich versuche, dies zu drucken?Swift: Absturz beim Drucken

+0

Es lässt Sie Bauen Sie es auf, aber wenn Sie auf dem Telefon darauf zugreifen, stürzt es ab –

+0

Sie sind gezwungen, ein optionales myPath-Objekt auszupacken, und Sie versuchen, dies auch dann zu drucken, wenn es tatsächlich null ist. Warum brauchst du den Pfad eines Bildes? – Glenn

Antwort

4

Der Absturz ist der berühmte Unerwartete gefunden nil beim Auspacken ... Fehler. Verwenden Sie keine Ausrufezeichen, es sei denn, der Wert ist nicht nil.

Entweder ist die Datei vorhanden ist oder nicht (höchstwahrscheinlich) Ihre Typ (Erweiterung) ist png nicht .png

let myPath = Bundle.main.path(forResource: "Settings", ofType: "png") 

jedoch heutzutage die URL verwandte API vorzuziehen ist

let myURL = Bundle.main.url(forResource: "Settings", withExtension: "png") 
+3

Man kann argumentieren, dass Sie das Ergebnis von 'Bündel.main.url (oder Pfad) erzwingen sollten, weil Sie versuchen, eine Datei zu laden, die Sie dort erwarten. Wenn die Datei nicht vorhanden ist, handelt es sich um ein Setup-Problem mit dem Projekt (oder einem Typ), und Sie möchten, dass die App sofort abstürzt, damit Sie das Problem mit dem Projekt (oder dem Tippfehler) beheben können. – rmaddy

1

Meine einfache Vermutung ist, dass myPath null ist, also stürzt es bei der Null-Zeiger-Ausnahme ab. Entfernen Sie das Ausrufezeichen und verwenden Sie:

print(myPath) 

Wenn es druckt null, dann haben Sie Ihre Antwort.

+0

Wissen Sie, warum es null ist? –