2012-02-06 15 views
10

Ho provato a caricare un semplice file di testo in un test di unità per un'app iOS.NSBundle pathForResource restituisce nil

NSString* resourcePath = [[NSBundle mainBundle] pathForResource: @"stopPointsInCircleData" ofType:@"txt"]; 
NSString* stopPointData = [NSData dataWithContentsOfFile: resourcePath]; 

Il mio problema è che pathForResource restituisce nil.

Il file stopPointsInCircleData.txt si trova nella directory del codice di test e il file è elencato correttamente in "Copia risorse pacchetto" nelle "Fasi di creazione" della destinazione del test.

Ho cercato di rilassare la ricerca impostando Type su zero, ma non ha funzionato neanche.

Qualsiasi aiuto è molto apprezzato.

+0

Potrebbe essere più semplice impostare il percorso manualmente? 'NSHomeDirectory()' ti aiuterà – Nekto

+0

forse perché non è txt .. hai controllato il formato del file .... potrebbe essere qualcos'altro ..rtf? – Shubhank

risposta

27

Il tuo problema è che in un target di test unitario, -mainBundle non fa riferimento al bundle target del test ma al bundle dell'eseguibile in cui viene iniettato il target del test. Nel caso di target di test ios, questo è il tuo pacchetto di app; nei target di test Mac può essere il bundle dell'app o il runner OCUnit.

È necessario cercare le risorse nel pacchetto del target di test. All'interno di una classe di test, è fatto in questo modo:

NSBundle *myBundle = [NSBundle bundleForClass: [self class]]; 
+0

'[auto classe]' non ha funzionato per me. Ho dovuto sostituire '[NAME_OF_TEST_CLASS class]'. –

+0

Se è necessario inserire un codice come questo * all'esterno * della classe di test, è possibile utilizzare '[NSBundle bundleForClass: NSClassFromString (@" MyTestClassName ")]' – CommaToast

5

Non c'è modo semplice per raggiungere questo, è possibile emulare quel percorso bundle:

Proprio testa ai

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host) e basta inserire:

$(BUILT_PRODUCTS_DIR)/AppName.app 

Test felici.

+1

Credo che questa risposta sia decisamente migliore di quella accettata! –

Problemi correlati