2010-07-23 8 views
0

J'ai une question, je ne peux pas obtenir ma base de données sqlite pour travailler/ouvrir sur un appareil ipad. Tout fonctionne bien sur le simulateur mais pas un vrai appareil. Je mets MODE à NO quand je veux tester sur un appareil mais il ne parvient pas à charger.sqlite fonctionne sur simulateur, mais pas sur l'appareil

sqlite3 *database; 
if (MODE) { //Simulator 
    result = sqlite3_open("/Users/userID/Myapp/VRdb.sqlite", &database); 
} else { // On device 
    result = sqlite3_open([databasePath UTF8String], &database); 
} 

if(result != SQLITE_OK) 
{ 
    sqlite3_close(database); 
    view = [[UIAlertView alloc] 
      initWithTitle: @"Database Error" 
      message: @"Failed to open database." 
      delegate: self 
      cancelButtonTitle: @"OK" otherButtonTitles: nil]; 
    [view show]; 
    [view autorelease]; 

} 

databasePath est obtenu par:

databasePath = [[NSBundle mainBundle] pathForResource: @ "VRDB" ofType: @ "sqlite"];

Y a-t-il quelque chose qui m'a manqué ?????

Répondre

4

Y a-t-il réellement un fichier sur ce chemin? Bien que la fonction sqlite3_open() crée le fichier s'il n'existe pas, vous ne pouvez pas créer de fichiers dans le regroupement d'applications (autorisations). Le fichier doit déjà exister et être copié dans le bundle en tant que ressource au moment de la construction, puis utilisé comme modèle pour copier dans une zone inscriptible comme le dossier de documents.

(merci à Peter pour me demandant de réaliser ma réponse était incomplète :-))

+0

awlcs: La meilleure façon, si vous avez l'intention de créer une base de données accessible en écriture, serait d'obtenir le chemin vers les documents répertoire et l'utiliser. Vous pouvez et devez le faire inconditionnellement, sans tenir compte du fait que vous utilisez le simulateur ou non. En effet, je suggère de ne pas créer plus de différences entre le comportement du simulateur et le comportement de l'appareil que vous ne le feriez de toute façon. –

+0

Merci à vous deux, je vais essayer. Je pensais que l'utilisation de NSBundle aurait été suffisant mais j'avais tort :) – awlcs