gpt4 book ai didi

ios - sqlite selectObject 方法,%%%@%% 东西

转载 作者:行者123 更新时间:2023-11-29 12:09:49 27 4
gpt4 key购买 nike

所以我正在为我的应用程序编写一个搜索功能,代码如下:

- (void) selectObject: (NSString *)notes{
[axKnotes removeAllObjects];
[notesName removeAllObjects];
NSString *sql = [[NSString alloc] initWithFormat:@"SELECT NOTESNAME, NOTESCONTENT, STATUS FROM axKnotes WHERE NOTESCONTENT LIKE '%%%@%%'", notes];
//there's a problem NSLog(sql);
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(dataBase, [sql UTF8String], -1, &statement, nil) == SQLITE_OK){
while (sqlite3_step(statement) == SQLITE_ROW) {
char *ch0=(char *)sqlite3_column_text(statement, 0);
NSString *name = [[NSString alloc]initWithUTF8String:ch0];
[notesName addObject:name];
//content
char *ch1= (char*)sqlite3_column_text(statement, 1);
NSString *content = [[NSString alloc]initWithUTF8String:ch1];
[axKnotes addObject:content];
}
}
}

- (void) searchBar: (UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self selectObject:searchText];
[self.tableOfNotes reloadData];
}

%%%@%% 在另一个应用程序中完美运行,但在这里当我键入(文本更改)时,数组立即被清除并且再也不会更改。 NSLog 说: enter image description here当我输入字符串“note1”时,昨晚它根本无法识别我的字符串,并记录了各种乱码,如 $#$*#%#**(你知道的。)我希望有人能帮助我真正快速...

最佳答案

您对 %%%@%% 的使用是正确的(注意事项我稍后会谈到)。当我运行你的代码时,我看到:

2015-11-19 10:23:57.981 MyApp[78060:30221665] SELECT NOTESNAME, NOTESCONTENT, STATUS FROM axKnotes WHERE NOTESCONTENT LIKE '%N%'
2015-11-19 10:23:58.867 MyApp[78060:30221665] SELECT NOTESNAME, NOTESCONTENT, STATUS FROM axKnotes WHERE NOTESCONTENT LIKE '%No%'
2015-11-19 10:23:59.576 MyApp[78060:30221665] SELECT NOTESNAME, NOTESCONTENT, STATUS FROM axKnotes WHERE NOTESCONTENT LIKE '%Not%'
2015-11-19 10:24:00.160 MyApp[78060:30221665] SELECT NOTESNAME, NOTESCONTENT, STATUS FROM axKnotes WHERE NOTESCONTENT LIKE '%Note%'
2015-11-19 10:24:00.970 MyApp[78060:30221665] SELECT NOTESNAME, NOTESCONTENT, STATUS FROM axKnotes WHERE NOTESCONTENT LIKE '%Notes%'
2015-11-19 10:24:04.885 MyApp[78060:30221665] SELECT NOTESNAME, NOTESCONTENT, STATUS FROM axKnotes WHERE NOTESCONTENT LIKE '%Notes1%'

如果您真的在使用这段代码,但没有看到 % 字符出现,则一定存在一些根本性的脱节。我建议在其中放置一个断点,并确保调用的是此方法,而不是其他可能挥之不去的排列。此外,请确保您的代码未使用某些非 ASCII % 字符。

如果问题仍然存在,您可能需要从设备/模拟器中删除该应用程序,然后重试。如果不行,则找到派生数据文件夹,退出 Xcode,清空该派生数据文件夹,然后重新启动 Xcode 并重试。

但是,如果您解决了这个 %%%@%% 问题,但您仍然没有看到您的表格得到刷新,则该问题的可能来源多种多样:

  • tableOfNotesnil(例如, socket 未正确连接);
  • axKnotes 和/或 notesNamenil(例如 NSMutableArray 从未正确实例化);或
  • UITableView 的数据源未正确连接。

如果您修复了 SQLite 代码但仍然没有看到 TableView 更新,您应该检查这些变量/属性(使用断点或 NSLog)并确保它们都不是

--

关于此 SQLite 代码的一些不相关的警告:

  1. 如果 sqlite3_prepare_v2 失败,我建议记录 sqlite3_errmsg,如果没有它,错误将被忽略。

  2. 记得调用sqlite3_stmt 引用的sqlite3_finalize。否则,代码将会泄漏。

  3. 您正在使用 initWithFormat 构建 SQL。这是一个非常糟糕的主意,因为如果用户曾经搜索过类似 O'Malley 的内容,SQL 就会失败。相反,请在 SQL 中使用 ? 占位符并从 SQL 中删除 ' 字符,然后将值绑定(bind)到该 ? 占位符:

    - (void) selectObject: (NSString *)notes{
    [axKnotes removeAllObjects];
    [notesName removeAllObjects];

    const char *sql = "SELECT NOTESNAME, NOTESCONTENT, STATUS FROM axKnotes WHERE NOTESCONTENT LIKE ?";
    NSString *value = [[NSString alloc] initWithFormat:@"%%%@%%", notes];

    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2(dataBase, sql, -1, &statement, NULL) != SQLITE_OK) {
    NSLog(@"%s", sqlite3_errmsg(dataBase));
    return;
    }

    if (sqlite3_bind_text(statement, 1, [value UTF8String], -1, SQLITE_TRANSIENT) != SQLITE_OK) {
    NSLog(@"%s", sqlite3_errmsg(dataBase));
    }

    int rc;
    while ((rc = sqlite3_step(statement)) == SQLITE_ROW) {
    char *ch0=(char *)sqlite3_column_text(statement, 0);
    NSString *name = ch0 ? [[NSString alloc]initWithUTF8String:ch0] : @"";
    [notesName addObject:name];
    //content
    char *ch1= (char*)sqlite3_column_text(statement, 1);
    NSString *content = ch1 ? [[NSString alloc]initWithUTF8String:ch1] : @"";
    [axKnotes addObject:content];
    }
    if (rc != SQLITE_DONE) {
    NSLog(@"%s", sqlite3_errmsg(dataBase));
    }

    sqlite3_finalize(statement);
    }

关于ios - sqlite selectObject 方法,%%%@%% 东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33810951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com