Objective c 从静态函数中如何将信息放入IVAR?
请注意,由于此函数被传递到另一个函数中,因此无法传递ViewController指针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
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 */
);