2016-07-30 42 views
1

Ich versuche, einen einfachen Bildschirmschoner zu bauen. Als erstes lade ich das Bild aus dem Asset-Katalog mit der Methode [[NSImage imagedNamed:]], die einen Nullwert zurückgibt, was bedeuten würde, dass das Bild nicht gefunden werden kann. Wenn ich versuche, das Bild direkt aus dem Bündel mit der Methode zu laden, bekomme ich auch einen Nullwert. Ich verstehe nicht, warum das passiert. Das Bild befindet sich im Asset-Katalog und in den Projekteinstellungen habe ich es als Bundle-Ressource festgelegt.Warum kann ich ein Bild, das sich im Anlagenkatalog befindet, nicht laden?

+0

'[NSIImage imageNamed:]' ist für den Zugriff auf Bilder in Ihrem App-Bundle, nicht Asset-Katalog. Warum können Sie das Bild nicht in Ihr App-Paket einfügen? – Droppy

+1

Ich habe Versionen meines Bildes für Retina und nicht Retina Macs optimiert, also dachte ich, der beste Weg wäre der Asset-Katalog. Natürlich könnte ich die Bilder direkt in das App-Bundle legen, aber das funktioniert auch nicht. – ok404

Antwort

0

Nachdem ich weiter im Internet gesucht habe, habe ich herausgefunden, dass der Bildschirmschoner als eine Art Plugin ausgeführt wird und durch Laden des Hauptpakets habe ich das System Preference Bundle geladen, was bedeutet, dass ich meine Ressource nicht durch Laden der Hauptpaket, stattdessen muss ich das Bundle mit bundleIdentifier oder mit dem Pfad laden, wo das Bundle gespeichert ist. So sieht mein Code wie folgt nun:

NSBundle*bundle=[NSBundle bundleWithIdentifier:@"com.myname.APOD"]; 
NSImage*image=[[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"appimage" ofType:@"png"]]; 
0

Sie können Zugang Bilder in Asset-Kataloge mit Namen, jedoch nicht die imageNamed: Methode der NSImage mit -

Stattdessen Sie ein Bündel für Bildressourcen abfragen von bestimmten Namen, z ein Bild in dem Bündel der Klasse zu finden, das Bild anfordert würden Sie:

NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 
NSImage *myImage = [bundle imageForResource:@"MyImageName"]; 

wo MyImageName auf den Namen verweist Sie das Bild in der Asset-Katalog zugeordnet.