質問

Thoses 2関数を使用しているコントローラービューがあります。


[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では、ここに詳細な2番目の関数があります。


- (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);
}

問題は、2番目の関数が機能していないことです(Librairiesルーチンはシーケンスから呼び出されます)。私はすでに同じ方法で最初の関数を呼び出しているためです(同時に引数を使用して多くのクエリを実行できるようにしたい)。 nsinvocationを使用することがこの問題の解決策になる可能性があると聞きましたが、nsinvocationを使用してコードを回す方法がわかりません。誰かが私を助けることができますか?

よろしくお願いします、

役に立ちましたか?

解決

あなたが持つことができる問題は、あなたの準備されたステートメントが後に無効であるということです sqlite3_close. 。データベースを開くたびに、新しい準備されたステートメントを作成する必要があります。

  1. でデータベースを開きます sqlite3_open.
  2. 声明を準備します sqlite3_prepare と友達。
  3. と結合します sqlite3_bind.
  4. ステップで sqlite3_step.
  5. その後、電話してください sqlite3_finalize.
  6. データベースを閉じます sqlite3_close.

そのステートメントは別のデータベースハンドルのために準備されたため、ステートメントをリセットすることはできません。

NB

私はsqliteにあまり精通していません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top