2015-01-17 16 views
7

Sono in procinto di imparare come utilizzare xcode e come scrivere applicazioni per Mac.URLForResource restituisce nil

Quindi, ho un semplice screensaver che carica un file esterno che funziona bene. Ho deciso che sarebbe stato meglio incorporare il codice html nell'applicazione per ridurre le dipendenze esterne.

Ho trascinato il file HTML nella cartella delle risorse, è al livello superiore non ci sono sottocartelle o altro.

resource added

ho fatto in modo il Aggiungi ai bersagli avevano la mia domanda in essa, insieme con la selezione 'creare riferimenti delle cartelle' e "copiare i file, se necessario. Io uso il seguente per ottenere l'URL del file, ma restituisce nil

NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"embedded" withExtension:@"html"]; 


System Preferences[10185]: fileUrl returned (null) 

Ho letto attraverso tutte le altre SO problemi per i problemi simili, ma nessuna delle correzioni sembrano applicarsi. Ho passato e controllato loro.

Se mostro il contenuto del pacchetto del build finale, l'embedded.html è lì dentro. Mi manca qualcosa di veramente ovvio?

Modifica per aggiungere

In fasi di creazione è elencato in copia Bundle Risorse

enter image description here

versione 6.1.1 Xcode è

+2

Hai controllato che nelle fasi di compilazione il file si trova in "Copia risorse pacchetto"? –

+0

Sì, è lì per essere copiato. Ho appena aggiunto l'immagine alla domanda. – Fuzzy

+0

È uno strumento da riga di comando? Se è così non ha un pacchetto di app. Devi invece creare un'applicazione Cocoa. – HAS

risposta

11

Dopo qualche notevole scavo e uno smidgeon di fortuna Ho trovato che

NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"embedded" withExtension:@"html"]; 

non è corretto e dovrei usare

NSURL *fileUrl = [[NSBundle bundleForClass:[self class]] URLForResource:@"embedded" withExtension:@"html"]; 

invece.

, ovvero Bundle bundle NSBundleForClass: [classe singola] e non NSBundle mainBundle consente l'accesso a un pacchetto di salvaschermo.

Potrebbe essere ovvio, ma solo se si sa;)

Vedi Apple Developer NSBundle Class Reference

+0

Grazie per la risposta. Sicuramente non mi aspettavo questo. Un po 'strano che qualcosa che ha funzionato fin dall'inizio cambi improvvisamente. –

+0

Wow, dopo 5 zillion di ricerche, 3 head-to-keyboard, 4 pause fumo, 2 pisolini per "dormire su di esso" e 6 ciambelle in gelatina, ho finalmente trovato questa soluzione. Hmmm, si potrebbe pensare - con metà dei mondi liquidità, Apple scriverà qualcosa di decente, unificato, centralizzato, non frammentato, preciso, non TL; DR, per-gridare-a voce alta la documentazione. (dov'è di nuovo il pulsante di accensione mac?) – bob

6

Ho avuto un problema simile. La risposta per me era di verificare l'appartenenza al target dell'identità dell'oggetto. target membership must be selected for any object to be analyzed or accessed in the app

0

Chiudere e riavviare Xcode ha risolto questo problema per me.

Problemi correlati