iphone FMDB não pode encontrar a tabela
-
21-08-2019 - |
Pergunta
- init
{
if(![super init]) return nil;
//the database is stored in the application bundle.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingFormat:@"/base.sqlite"];
NSLog(@"%@",path);
db = [FMDatabase databaseWithPath:path];
[db setLogsErrors:YES];
if (![db open]) {
NSLog(@"Could not open db.");
return 0;
} else {
NSLog(@"DB Open....");
}
FMResultSet *rs = [db executeQuery:@"SELECT * FROM settings"];
return self;
}
este é o código que eu uso para tentar acessar os dados de configurações. mas isso dá um erro (e eu posso garantir-vos que há uma mesa configurações!)
aqui é um lixo do terminal
BEGIN TRANSACTION;
CREATE TABLE About (id integer PRIMARY KEY AUTOINCREMENT,key varchar UNIQUE,value text);
DELETE FROM sqlite_sequence;
CREATE TABLE settings (version integer,updated timestamp,owner varchar);
INSERT INTO "settings" VALUES(1,'2009-05-11 14:29:07','boulevart');
COMMIT;
e o erro:
2009-05-11 16:14:19.799 SummerGuide[9892:20b] /Users/andyjacobs/Library/Application Support/iPhone Simulator/User/Applications/762630F5-78CB-41A4-85C2-964316ACFE1D/Documents/base.sqlite
2009-05-11 16:14:19.801 SummerGuide[9892:20b] DB Open....
2009-05-11 16:14:19.804 SummerGuide[9892:20b] DB Error: 1 "no such table: settings"
2009-05-11 16:14:19.804 SummerGuide[9892:20b] DB Query: SELECT * FROM settings
O estranho é se eu mudar o meu caminho para por exemplo /baseeeeee.sqlite (que não é nenhum arquivo) ele ainda diz "DB Abrir ...."
Acabei de adicionar um arquivo sqlite existente (base.sqlite) a minha pasta recurso e acrescentou o lib sqlite3 aos meus quadros.
Solução
Para obter o caminho para o arquivo no pacote aplicativo, use o seguinte:
[[NSBundle mainBundle] pathForResource:@"base" ofType:@"sqlite"];
Para abrir na verdade, o banco de dados, você pode ter que copiá-lo para o diretório Documents primeiro lugar, porque a tentar modificar um arquivo no seu pacote aplicativo é uma má notícia.