L'une des applications que je développe utilise SQLite pour stocker les données téléchargées à partir d'un serveur. L'application elle-même utilise le multi-threading afin que l'application se lance, l'application télécharge les données en arrière-plan tout en présentant également l'interface utilisateur à l'utilisateur.L'application iPhone SQLite prépare une déclaration d'erreur
L'utilisateur à ce moment peut commencer à naviguer dans l'application, en tapant sur les lignes du tableau pour explorer les pages détaillées. Parfois, lorsque j'appuie sur une ligne de table, l'application se bloque à l'un des nombreux appels de fonction sqlite3_prepare_v2(). Cela est arrivé beaucoup plus souvent lorsque j'autorise plus d'une opération simultanée maximale pour mon NSOperationQueue. Lorsque mon application est lancée, j'ouvre une connexion à une base de données et je la garde ouverte jusqu'à ce que l'application ait besoin de se terminer, puis Je ferme la connexion.
Voici une ligne d'exemple, il se bloque à:
if(sqlite3_prepare_v2(objDatabase, [strGet cStringUsingEncoding:NSUTF8StringEncoding], -1, &stmtGet, NULL) == SQLITE_OK)
{
...
}
erreur indique EXEC_BAD_ACCESS
Comme 1 sur 20 ou 1 sur 30 pistes app, il se briserait. Cela signifie que mon instruction SQL fonctionne 99% du temps.
Quelqu'un a déjà eu cela avant?
appelles-tu sqlite en utilisant un objet ?? – sandy
Eh bien, j'ai une seule instance de la base de données SQLite dans mon application Delegate * canards pour la couverture *, chaque fois que je veux accéder à ma base de données, je ferais quelque chose comme [[AppDelegate sharedDelegate] .objLocalDal doSomething]; – Zhang
Vous avez donc une seule connexion à la base de données partagée entre les threads (NSOperationQueues)? –