2009-05-26 12 views
6

Ho un'applicazione per iPhone in cui un numero di oggetti dominio sono popolati con dati inseriti dall'utente. Per ripristinare lo stato dopo l'interruzione, questi oggetti implementano il protocollo NSCoding e vengono scritti sul disco (la directory Documenti) nel messaggio applicationWillTerminate. Quindi, quando l'applicazione viene nuovamente avviata, i byte dei dati vengono caricati e gli oggetti del dominio vengono ripopolati. Codice per ottenere la directory di documenti è la seguente:Come posso correggere l'errore Cocoa 513?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

questo ha lavorato molto nel simulatore, ma una volta ho schierato l'applicazione per l'iPhone ha smesso di funzionare. Il motivo per cui è il codice di errore iPhone 513 - che a quanto pare significa "autorizzazione negata". C'è una nota nella documentazione dev iPhone che spiegano un po 'di più -

Sul dispositivo, il percorso restituito (documentsDirectory) è simile al seguente: /var/mobile/Applications/30B51836- D2DD-43AA-BCB4-9D4DADFED6A2/Documenti

Tuttavia, il simulatore, il percorso restituito assume il seguente modulo :

/Volumes/Stuff/Users/johndoe/Library/Application Support /iPhone Simulator/user/Applicazioni/118086A0-FAAF-4CD4-9A0F-CD5E8D287270/Documenti

Questo è il comportamento esatto che sto vedendo. Non sono molto sicuro di come si tratti di ottenere un errore di autorizzazione negato e cosa posso fare per risolverlo. E cosa dice qui sotto -

a leggere e scrivere le preferenze degli utenti, utilizzare la classe NSUserDefaults o l'API CFPreferences. Queste interfacce eliminano la necessità per voi di creare un percorso nella directory Libreria/Preferenze/e leggere e scrivere file di preferenza direttamente. Per ulteriori informazioni su usando queste interfacce, vedere “Aggiunta il Bundle Impostazioni”.

Se l'applicazione contiene suono, immagine , o altre risorse nel bundle applicazione, è necessario utilizzare il classe NSBundle o CFBundle opaco digitare per caricare tali risorse. I pacchetti hanno una conoscenza inerente di dove le risorse di vivono all'interno dell'applicazione. Inoltre, i pacchetti sono a conoscenza delle preferenze della lingua dell'utente e sono in grado di scegliere automaticamente le risorse localizzate sulle risorse predefinite. Per ulteriori informazioni su fasci, vedere “L'applicazione Bundle”.

non vedo come posso utilizzare il pacchetto di applicazioni per caricare byte di dati però. Qualsiasi aiuto o esempi?

risposta

13

Non so come funziona, ma apparentemente utilizzando stringByAppendingPathComponent anziché stringByAppendingString per la creazione del percorso risolto il problema.

+1

Penso che la differenza sia la barra alla fine di "Documenti". –

1

Il paragrafo relativo al fascio applicazione si riferisce a:

NSString *path = [[NSBundle mainBundle] pathForResource:@"somefile" ofType:@"png"]; 

Questo ed altri metodi di NSBundle consentono di fare riferimento le risorse dall'interno del bundle dell'applicazione senza in realtà sapere dove si trova il pacchetto di applicazione.

Disclaimer: Non ho lavorato con l'iPhone.

Con la dichiarazione di non responsabilità in mente, in OS X semplice è considerata una cattiva forma scrivere cose all'interno del pacchetto di applicazioni. Si salva materiale sotto la directory del supporto applicazione dell'utente -> consultare NSApplicationSupportDirectory.

0

Ho ricevuto questo errore (513) perché il percorso era errato. Il doppio controllo del mio percorso ha risolto il problema :)

Problemi correlati