2011-08-30 12 views
10

Sto provando a copiare un file dal mio pacchetto di applicazioni nella directory dei documenti della mia app. Ricevo un errore "Errore Cocoa 262". Che cosa sto facendo di sbagliato? Qui è il mio codice:Cosa c'è di sbagliato nella mia copia qui?

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"]; 
NSURL *initialURL = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"sqlite"]]; 

NSError *error = nil; 

if (![[NSFileManager defaultManager] fileExistsAtPath:[initialURL absoluteString]]) { 
    NSLog(@"Original does not exist. \nPath: %@", [initialURL absoluteString]); 
} 

if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL absoluteString]]) { 
    NSLog(@"Destination file does not exist. \nPath: %@", [storeURL absoluteString]); 

    [[NSFileManager defaultManager] copyItemAtURL:initialURL toURL:storeURL error:&error]; 

    NSLog(@"Error: %@", [error description]); 
} 

risposta

32

Il problema è che si sta inizializzando un URL con un semplice percorso di file vecchio.

NSURL *initialURL = 
    [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"CoreData" 
                 ofType:@"sqlite"]]; 

Utilizzare invece [NSURL fileURLWithPath:].

3

L'errore che si sta ottenendo è

NSFileReadUnsupportedSchemeError Read error because the specified URL scheme is unsupported

che credo significherebbe uno dei tuoi sentieri non sta formando in modo corretto. forse scrivi questi percorsi sul log e vedi se stanno uscendo come te li aspetti.

+0

Qual è lo schema corretto e da dove hai ricevuto queste informazioni? – Moshe

+0

Non utilizzare + URLWithString: a meno che non si desideri creare l'intero percorso "file: /// percorso/su/file". Ma perché dovresti farlo quando + fileURLWithPath: fa quello per te. – kperryua

+0

ottenuto le informazioni da [link] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html) schema corretto significa praticamente come il tuo url è formattato – smitec

1

L'errore 262 è definito in FoundationErrors.h come NSFileReadUnsupportedSchemeError.

Ti suggerisco di utilizzare NSLog() per scrivere i valori letterali dei due URL che stai utilizzando e accertarti che siano file: // URL e che siano completi.

+0

Entrambi i valori sono completi. – Moshe

+0

E sono file: // URL? –

2

Ho risolto il problema, anche se, a dire il vero, non sono sicuro di cosa fosse. Devo andare oltre il codice a lavorare di nuovo, ma qui è:

NSError *error = nil; 


NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", @"CoreData", @"sqlite"]]; 

//if file does not exist in document directory, gets original from mainbundle and copies it to documents. 

if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
    NSString *defaultFilePath = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"sqlite"]; 
    [[NSFileManager defaultManager] copyItemAtPath:defaultFilePath toPath:filePath error:&error]; 

    if (error != nil) { 
     NSLog(@"Error: %@", error); 
    } 
} 

Edit:

Ho il sospetto che il percorso della directory dell'applicazione non era corretto, dato che il corpo della generato applicationDocumentsDirectory sembra diverso dal metodo utilizzato per il valore della variabile documentsDorectory mostrata sopra.

Problemi correlati