3

私は xcode/iOS/Objective-C と sqlite の両方が初めてです。基本を独学しようとしています-そして、選択クエリにsqlite3ラッパー「sqlite3_exec」を使用したいと思います。何らかの理由で、誰かがこれを行っている簡単な例がどこにも見つかりません。

基本的に、メソッドにはコールバック関数のパラメーター (3 番目のパラメーター) があります。

int sqlite3_exec(
  sqlite3*,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);

それはいいです。私はコールバックをよく知っています。ただし、構文を正しく理解できないようです。iPad (iOS 5.1) xcode (4.3) プロジェクトのビュー コントローラーの 1 つを引き継ぎ、以下に示す変更を加えました。

#import "SecondViewController.h"
#import "sqlite3.h"
#import "AppState.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (int)myCallback:(void *)a_parm argc:(int)argc argv:(char **)argv column:(char **)column
{

    return 0;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //grab questionnaire names
    char *sql = "select * from QST2Main order by [Name]";
    char *err = nil;
    sqlite3 *db = [[AppState sharedManager] getgCn]; 

    sqlite3_exec(db, sql, myCallback, nil, &err); 
}

基本的に、このビューが最初にロードされたときにクエリを実行して、後で使用するためにデータを保存したいと考えています。しかし、XCode は、その下部にある「myCallback」の使用法を好みません。それは言う:識別子「myCallback」の宣言されていない使用。

そのメソッドはヘッダー ファイルで宣言されており、静的にすることも試みました。このエラーを解消するものは何もないようです。ここで何か根本的に間違ったことをしているに違いないことはわかっていますが、私の人生では、何が欠けているのかを理解するのに役立つ他のコードサンプルを見つけることさえできません。

どうもありがとう!

4

1 に答える 1

6

コールバックは C 関数である必要があります。試す

int myCallback(void *a_parm, int argc, char **argv, char **column)
{
    return 0;
}
于 2012-06-25T23:31:03.340 に答える