2010-04-19 19 views
0

Ok, maintenant je fini de se développer sur l'émulateur et quand je l'ai installé sur mon appareil de test, je suis arrivé l'erreursqlite3 sur l'émulateur iPhone par rapport aux autorisations de l'appareil?

tentative d'écrire une base de données en lecture seule

Quels sont les paramètres pour contrôler la DB accès? Est-ce que cela va être difficile à gérer quand il est déployé?

Plus d'informations ... Je pense que je sais ce qui se passe ... Quand je cherche ma DB il n'est pas dans le même chemin que les tutoriels. Ce que j'aime faire, c'est avoir un groupe qui se trouve sous le dossier racine du projet pour "Contenu". J'ai ajouté le fichier JustADatabase.sqlite dans ce groupe sous mon chemin défini. Comme tous les chemins ne sont pas accessibles en écriture, je suppose que mon chemin créé par l'utilisateur n'est pas accessible en écriture une fois installé.

Je crois qu'il existe un moyen d'utiliser le script build/copy pour installer le fichier au bon endroit.

Pensez-vous que c'est le problème? Savez-vous comment script le correctif ou comment placer le fichier dans l'emplacement correct dans mon projet afin qu'il soit copié correctement? Voici le code menant à la commande sqlite-open avec les chemins 'tutorial' mis en commentaire. Cela fonctionne pour la lecture et peut être la cause du refus d'accès en écriture.

- (void)initializeDatabase { 

    // ??? NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    // ??? NSString *documentsDirectory = [paths objectAtIndex:0]; 
    // ??? NSString *pathTutorial = [documentsDirectory stringByAppendingPathComponent: @"JustaDatabase.sqlite"]; 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"JustaDatabase" ofType:@"sqlite"]; 

    if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) { 
     NSLog(@"%s: opened database %@", __FUNCTION__, path); 
    } else { 
     NSAssert1(0,@"Failed to open database: '%s'.", sqlite3_errmsg(database)); 
    } 
} 

Répondre

1

Les autorisations sqlite3 ne sont que des autorisations de fichiers.

Vous devez copier le fichier db dans le répertoire de documents, car vous ne pouvez pas écrire dans le fichier dans le répertoire de regroupement sur le périphérique.