2011-08-30 13 views
10

Estoy tratando de copiar un archivo de mi paquete de aplicaciones al directorio de documentos de mi aplicación. Me aparece un error, "Cocoa Error 262". ¿Qué estoy haciendo mal? Aquí está mi código:¿Qué pasa con mi copia aquí?

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]); 
} 

Respuesta

32

El problema es que está inicializando una URL con una ruta de archivo antigua simple.

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

Use [NSURL fileURLWithPath:] en su lugar.

3

El error que está recibiendo es

NSFileReadUnsupportedSchemeError Read error because the specified URL scheme is unsupported

que creo que significaría uno de sus caminos no se está formando correctamente. quizás escriba estas rutas en el registro y vea si están saliendo como espera que lo hagan.

+0

¿Cuál es el esquema correcto y de dónde obtuviste esta información? – Moshe

+0

No use + URLWithString: a menos que desee construir la ruta completa "file: /// path/to/file". Pero ¿por qué quieres cuando + fileURLWithPath: hace eso por ti? – kperryua

+0

obtuvo la información de [link] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html) esquema correcto, básicamente, significa cómo su url está formateado – smitec

1

El error 262 se define en FoundationErrors.h como NSFileReadUnsupportedSchemeError.

Sugiero que use NSLog() para escribir los valores literales de las dos URL que está utilizando y asegúrese de que sean file: // URL y que parezcan completas.

+0

Ambos valores están completos. – Moshe

+0

Y son file: // URLs? –

2

He resuelto el problema, aunque para ser honesto, no estoy seguro de qué se trataba. Tengo que ir sobre el código funcione de nuevo, pero aquí está:

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); 
    } 
} 

Editar:

sospecho que la ruta de acceso al directorio de la aplicación es incorrecta, dado que el cuerpo de la generada applicationDocumentsDirectory se ve diferente al método utilizado para el valor de la variable documentsDorectory que se muestra arriba.