2011-10-15 8 views
21

Desidero aggiungere alcuni file statici (immagine, binario, ecc.) Alla mia app. Li ho posizionati sotto una cartella denominata Resources e l'ho aggiunta al mio progetto XCode.Come accedere ai file locali all'interno del progetto

Successivamente, ho aggiunto questi file allo Copy Bundle Resources nella scheda Build Phases nelle impostazioni del progetto.

Tuttavia, non riesco a farvi riferimento nel modo giusto.

Per esempio, la lettura di un file binario:

NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:@"data.bin"]; 
if(![is hasBytesAvailable]) NSLog(@"wrong"); 

Questo non sempre & stampe wrong

ho provato un approccio simile con NSData initWithContentsOfFile: ma questo non sarebbe nemmeno eseguire. Un altro tentativo è stato quello di utilizzare [NSBundle mainBundle] ma anche questo non è stato eseguito completamente.

Sono nuovo per iOS, per favore aiuto Posso accedere ai miei file locali! Qualsiasi aiuto sarebbe apprezzato.

Grazie,

+0

Il caso è corretto? iOS distingue tra maiuscole e minuscole, quindi 'Data.BIN' e' data.bin' sono due file diversi. – DarkDust

+0

tutte minuscole :( – chizzle

risposta

28

È necessario assicurarsi di accedere al file nel posto giusto. Xcode colloca i file di risorse nel "pacchetto di applicazioni" dell'applicazione nella directory Risorse. Ci sono molti modi per risolverli.

Un modo comune è quello di ottenere il percorso di un file nel bundle:

NSBundle *mainBundle = [NSBundle mainBundle]; 
NSString *myFile = [mainBundle pathForResource: @"data" ofType: @"bin"]; 

Se avete altri file in luoghi non standard nel vostro pacco, ci sono variazioni a pathForResource che lasciate che il vostro specificare una nome della directory.

Se volete vedere la posizione attuale sul vostro hard-drive che il simulatore sta usando in modo da poter ispezionare, si può dire:

NSLog(@"Main bundle path: %@", mainBundle); 
NSLog(@"myFile path: %@", myFile); 

Cercare la "Guida alla programmazione Bundle" in Xcode libreria di documentazione per iniziare. :-)

+0

Se ricevi degli errori usando il codice qui sopra (come tornare indietro per myFile) trova il pacchetto di applicazioni nella directory di costruzione di Xcode, fai clic destro (per visualizzarne il contenuto) e vedi se Xcode ** effettivamente ** inserisce i "dati" .bin "file lì. :-) –

+0

in effetti mi stava restituendo nil per' pathForResource', ho eliminato tutte le mie risorse e le ho aggiunte di nuovo da zero. qual è il modo migliore per aggiungere pacchetti? faccio clic destro sul progetto e faccio 'Aggiungi file a ?' – chizzle

+0

Dovresti essere in grado di usare il pulsante" + "nella parte" Copia risorse bundle "delle impostazioni Fasi di creazione per il tuo obiettivo. Di nuovo, se vuoi vedere cosa Xcode sta facendo dietro le quinte, usa il Finder per andare a '~/Library/Developer/Xcode/DerrivedData/{lettere minuscole casuali} nome}/Build/Prodotti/Debug-iphonesimulator' e guarda all'interno del file ".app". Questo è il tuo pacchetto e dovrebbe avere i file che hai chiesto a Xcode di copiare. –

1

Usa NSBundle classe per questo. Per esempio:

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"bin"]; 
NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:path]; 
... 
+1

Sto ricevendo *** Termina l'applicazione a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: '*** - [NSURL initFileURLWithPath:]: parametro stringa nil' *** Primo stack di chiamate throw: – chizzle

0

In effetti, è necessario chiamare [è aperto] anche se si "inizializzaWithFileAtPath". Penserei che l'inizializzazione aprirebbe automaticamente il file per te, ma non è così.

Problemi correlati