Objective c 从静态函数中如何将信息放入IVAR?

Objective c 从静态函数中如何将信息放入IVAR?,objective-c,cocoa-touch,Objective C,Cocoa Touch,请注意,由于此函数被传递到另一个函数中,因此无法传递ViewController指针 static int callback(void *NotUsed, int argc, char **argv, char **azColName) { NSString *str = @""; int i; for(i=0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? arg

请注意,由于此函数被传递到另一个函数中,因此无法传递ViewController指针

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
    NSString *str = @""; 

    int i;

    for(i=0; i<argc; i++)
    {
        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
        str = [NSString stringWithFormat:@"%@\n%s = %s\n", str, azColName[i], argv[i] ? argv[i] : "NULL"];
    }
    printf("\n");


    //tvDisplay is a UITextView
    [tvDisplay setText:str]; // <---- ??? how to get to an iVar
    return 0;
}

回调函数通常有一个参数,允许您传递任意数据(通常是
void*
称为上下文或类似的内容)。设置回调函数时,可以传入需要访问的对象,然后在回调函数中检索该对象:

static void myCallback(int someResult, void *context) {
   SomeClass *someObject = (SomeClass *)context;
   [someObject doStuff];
}
在您的特定情况下,“要在回调函数中访问的任意数据”的位置是当前设置为0的回调函数本身后面的
void*
参数:

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 */
);
请记住,您有责任确保插入的任何数据在回调尚未返回时保持有效,如果需要,请在回调中释放这些数据

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 */
);