-6

私のアプリケーションでは、ボタンのクリックで次の画像に変更したいので、SQLite データベースに複数の画像があります。

これが私のコードです:

 -(void)Readthesqlitefile:(NSInteger *)sno
 {
sqlite3 *database;//database object
NSString *docpath=[self doccumentspath];//get sqlite path
const char *ch=[docpath UTF8String];//string to constant char UTF8string  main part to connect DB

if (sqlite3_open(ch, &database)==SQLITE_OK) {

    const char *chstmt="SELECT * FROM animal where rowid=  = %d",sno;

    sqlite3_stmt *sqlstmt;//to execute the above statement
    if (sqlite3_prepare_v2(database, chstmt, -1, &sqlstmt, NULL)==SQLITE_OK)
    {
        while (sqlite3_step(sqlstmt)==SQLITE_ROW)
        {
            const char *Bname=(char *)sqlite3_column_text(sqlstmt, 0);
            //converting const char to nsstring
            NSString *Bndname=[NSString stringWithFormat:@"%s",Bname];
            NSLog(@"Brand Names=%@",Bndname);
            lb1.text=[NSString stringWithFormat:Bndname];   

            NSUInteger legnt=sqlite3_column_bytes(sqlstmt, 1);

            if (legnt>0) {

                NSData *dt=[NSData dataWithBytes:sqlite3_column_blob(sqlstmt, 1) length:legnt];
                clsimg=[UIImage imageWithData:dt];//converting data to image
                imager.image=clsimg;
            }
            else {
                clsimg=nil;
            }
     }
    }
    sqlite3_finalize(sqlstmt);
}
sqlite3_close(database);
}

ボタンクリック機能:

  -(IBAction)changenext
  {
  int j;
  for (j=1; j<10; j++)
  {
      [self Readthesqlitefile:j];
  }

  }

動いていない。それを解決するのを手伝ってください。

4

4 に答える 4

2

あなたの質問から、ボタンをクリックするたびに画像を変更する必要があることを理解しています。私が正しければ、次のchangenextようにメソッドを変更します。

-(IBAction)changenext
  {
    static int j = 0;
    if (j > 10)
    {
       j = 0;
    }
    [self Readthesqlitefile:j];
    j++;
  }

上記のメソッドは、ボタンをクリックするたびに画像を変更します。最後の画像を表示した後、最初の画像から再び開始します。

編集:

また、この行は間違っているようです

const char *chstmt="SELECT * FROM animal where rowid= = %d",sno;.

sqlite3 には演算子はありません==(私はそう思います)。その行を次のように置き換えます。

NSString *query    = [NSString stringWithFormat:@"SELECT * FROM animal where rowid = %d",sno];
const char *chstmt = [query UTF8String];
于 2012-10-13T11:01:45.967 に答える
1
-(void)Readthesqlitefile:(NSInteger *)sno

パラメータとしてポインタを取りますが、値を渡します。

const char *chstmt="SELECT * FROM animal where rowid=  = %d",sno;

たぶん、この行はそれをsqlステートメントにフォーマットする必要があります。フォーマットコードはどこにありますか?

次の部分を変更します。MidhunMPの答えは正しい解決策だと思います

于 2012-10-16T16:44:51.323 に答える
0

すべてのデータはあなたの側にあるため、正確な答えを出すことはできませんが、このコードを試してデータの整合性を確認することはできます。

       NSData *dt=[NSData dataWithBytes:sqlite3_column_blob(sqlstmt, 1) length:legnt];
       UIImage *clsimg=[UIImage imageWithData:dt]; //Creating new object for UIImage
       if(clsimg!=nil)
       {
           imager.image=clsimg; //I'm assuming that imager is added in IB or you've created it before assigning clsimg.
           clsimg = nil;
       }
       else
       {
           NSLog(@"No clsimg created, may problem in converting.");
       }
于 2012-10-16T07:14:34.767 に答える
0

あなたのUIImageView(imageView)を想定

[imageView setImage:clsimg];

于 2012-10-22T04:34:33.617 に答える