0

我有一个使用这两个功能的控制器视图:


[appDelegate getFichesInfo:[[self.fichesCategory idModuleFiche] intValue] ]; //first function
self.fiche = (Fiche *)[appDelegate.fichesInfo objectAtIndex:0];


[appDelegate getFichesVisuels:[[self.fiche idFiche] intValue] ];  //second function not working
self.fiche = (Fiche *)[appDelegate.fichesInfo objectAtIndex:0];

所以在我的 ressourceManager 中,这里是第二个函数的详细信息:


- (void)getFichesVisuels:(int)value {

    fichesVisuels = [[NSMutableArray alloc] init];

    sqlite3 *database;

    if(sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK) {
        sqlite3_reset(getFichesVisuelsStatement);


        sqlite3_bind_int(getFichesVisuelsStatement, 1,  value);

        while(sqlite3_step(getFichesVisuelsStatement) == SQLITE_ROW) {


            NSString *aTitle = [NSString stringWithUTF8String:(char *)sqlite3_column_text(getFichesVisuelsStatement , 7)];
            NSString *aLpath = [NSString stringWithUTF8String:(char *)sqlite3_column_text(getFichesVisuelsStatement , 8)];

            Visuel *visuel = [[Visuel alloc] initWithName:aTitle lpath:aLpath];

            [fichesVisuels addObject:visuel];
        }

    }
    sqlite3_close(database);
}

问题是第二个函数不起作用(不按顺序调用库例程),因为我已经以相同的方式调用了第一个函数(我希望能够同时使用参数执行许多查询)。听说使用 NSInvocation 可以解决这个问题,但是不知道如何使用 NSInvocation 转我的代码。有人可以帮助我吗?

最好的祝福,

4

1 回答 1

0

您可能遇到的问题是您准备好的语句在sqlite3_close. 每次打开数据库时都需要创建一个新的预处理语句。

  1. 用 . 打开数据库sqlite3_open
  2. sqlite3_prepare与朋友一起准备声明。
  3. 与 绑定sqlite3_bind
  4. sqlite3_step.
  5. 之后,确保您致电sqlite3_finalize.
  6. 用 关闭数据库sqlite3_close

您不能只重置语句,因为该语句是为不同的数据库句柄准备的。

注意

我对 SQLite 不太熟悉。

于 2009-12-22T03:14:38.943 回答