2012-04-30 10 views
12

Creé una base de datos sql usando "SQLite Database Browser", la arrastré y la dejé caer en mi proyecto Xcode y la construí. Funciona perfectamente bien en el simulador, pero se estrella en el iPhone, con este error:Bloqueos de la aplicación en el intento de creación de la base de datos

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Failed to create writable database file with message 'The operation could‚ 
not be completed. (Cocoa error 260.)'.' 

Aquí está mi código:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Creates a writable copy of the bundled default database in the application Documents directory: 
    NSLog(@"AppDelegate...Looking for embedded Database file..."); 
    BOOL success; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    // Grab the path to the Documents folder: 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"users.sql"]; 

    success = [fileManager fileExistsAtPath:writableDBPath]; 
    if (success) { 
     NSLog(@"Database File Exists in Documents folder!"); 
     NSLog(@"Its path is: %@", writableDBPath); 
     return YES; 
    } 
    else { 
    // But if the writable database does not exist, copy the default to the appropriate location. 
    NSLog(@"!!NO Database File Exists in Documents folder!"); 
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"users.sql"]; 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 
    if (!success) { 
     NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]); 
    } 
    else 
     NSLog(@"WROTE THE DATABASE FILE!!!"); 
} 

return YES; 
} 

Una vez más, esto funciona en el simulador, pero no en el iPhone. (Esto no podría tener nada que ver con el archivo tiene una extensión ".sql" en comparación con una extensión ".sqlite", ¿o sí? Porque es que las extensiones que "SQLite Database Browser" da a los archivos que crea ... .)

+0

Hasta donde sé, el error 260 de Cocoa es NSFileReadNoSuchFileError, por lo que puede deberse a la extensión. – Vin

+0

Bueno, acabo de cambiar el nombre del archivo para terminar con ".sqlite" - y reimporté el archivo en Xcode, y cambié el código para que coincida con el nuevo nombre de archivo - aún se bloquea - el mismo motivo. Así que eso no es todo ... – sirab333

+0

intente ejecutar el código del tutorial que ha usado en el dispositivo y vea si eso funciona. Si eso ocurre, puede haber un problema con el archivo db en sí. – Vin

Respuesta

28

la respuesta tiene que ver con asegurarse de que la "Membresía de destino" del archivo sql está en posición correcta, de modo que el proyecto "ve" que:

1) haga clic en el archivo sql en la izquierda -pane de Xcode

2) de apertura/mostrar el Inspector File (panel derecho)

3) En "la membresía de destino", asegúrese de que la "verificación" es "marcada"

eso es todo.

+0

gracias, eso es bueno! – iDhaval

+0

@ sirab333 debes aceptarlo como una respuesta. – Naeem

+0

@ sirab333: Gracias ... ¡esto funciona para mí! –

0

en mi tema: cheque esta fila:

NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"users.sql"] 

Compruebe el nombre del archivo en su conjunto y en el código - el fallo también se revistió de nombres de archivo diferentes.

2

enter image description here

Esta solución resuelve mi problema espero que le ayude.

Cuestiones relacionadas