Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iOS使用问题 #74

Closed
yugaoxiang opened this issue Jan 20, 2022 · 19 comments · Fixed by #97
Closed

iOS使用问题 #74

yugaoxiang opened this issue Jan 20, 2022 · 19 comments · Fixed by #97

Comments

@yugaoxiang
Copy link

你好 由于自己编译脚步不过,我使用你提供的变异好的文件,将src拖到iOS项目中,发现#include <cmrc/cmrc.hpp>这个文件找不到。请问怎么解决?

@wangfenjin
Copy link
Owner

wangfenjin commented Jan 20, 2022

你可以参考 #73 这个 PR 怎么编译 iOS 的

他提交了一个 build-ios.sh 可以编译的。你直接把 src 拿过去肯定不行啊

如果报什么错你可以把错贴上来

@yugaoxiang
Copy link
Author

非常感谢指点,我已经成功编译了iOS代码,然后使用了例子中sql创建表,查询的sql为"select simple_highlight(t1, 0, '[', ']') from t1 where x match simple_query('zhoujiel')",成功取到了数据,但是�从结果中取某个键的时候,为什么不能用“x”取(创建表的时候" CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'simple')",这应该指定了一个键x),只能通过‘simple_highlight(t1, 0, '[', ']')’?

@wangfenjin
Copy link
Owner

可以的啊,你试试 select x from t1 where x match simple_query('zhoujiel') 应该也是可以 work 的。例子中用 simple_highlight 只是告诉你如果你想让结果高亮可以这么用。

这个库是一个中文的分词插件,具体 fts5 的语法跟 sqlite 这里支持的是一样的 https://www.sqlite.org/fts5.html

@yugaoxiang
Copy link
Author

好的,我应该知道怎么用了,非常感谢!

@wangfenjin
Copy link
Owner

如果你的代码适合公开也可以考虑发到 github 上让其他人学习怎么用,或者写一篇博客文章教一下别人怎么用。

因为我自己不会 iOS 开发所以有些问题也解答不了。

@yugaoxiang
Copy link
Author

嗯嗯,我主要用的还是这边的代码,参考了#73,可以用build-ios.sh编译,也可以在#73这个页面找到回复,直接下载“boyan01” 大佬的代码,把Libs这个文件夹拖到项目里,注意用到这个库的地方要把文件改成.mm否则编译不过,代码很少跟simple简介差不多
NSString *fts = @" CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'simple')"; BOOL result = [db executeUpdate: fts];

BOOL result = [db executeUpdate:@"insert into 't1' values(?)" withArgumentsInArray:@[@"周杰伦 Jay Chou:最美的不是下雨天,是曾与你躲过雨的屋檐"]];
NSString *sql = @"select * from t1 where x match simple_query('zhoujiel')";FMResultSet *result = [db executeQuery:sql];
iOS开发者看到这里基本应该会了,我完成这个功能后也会找时间,写一个文章出来。

@hxicoder
Copy link

hxicoder commented Aug 14, 2022

嗯嗯,我主要用的还是这边的代码,参考了#73,可以用build-ios.sh编译,也可以在#73这个页面找到回复,直接下载“boyan01” 大佬的代码,把Libs这个文件夹拖到项目里,注意用到这个库的地方要把文件改成.mm否则编译不过,代码很少跟simple简介差不多 NSString *fts = @" CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'simple')"; BOOL result = [db executeUpdate: fts];

BOOL result = [db executeUpdate:@"insert into 't1' values(?)" withArgumentsInArray:@[@"周杰伦 Jay Chou:最美的不是下雨天,是曾与你躲过雨的屋檐"]]; NSString *sql = @"select * from t1 where x match simple_query('zhoujiel')";FMResultSet *result = [db executeQuery:sql]; iOS开发者看到这里基本应该会了,我完成这个功能后也会找时间,写一个文章出来。

您好,请问编译build-ios.sh需要修改吗?我这边编译不成功,报错了

错误日志

CMake Error at src/cmake_install.cmake:74 (file):
file INSTALL cannot find
"/Users/daw/Documents/GitHub/simple/build-ios/src/Release-iphoneos/libsimple.a":
No such file or directory.
Call Stack (most recent call first):
cmake_install.cmake:62 (include)

@yugaoxiang
Copy link
Author

不用改,看看网络有问题吗

@wangfenjin
Copy link
Owner

@hxicoder 看起来是编译没成功,你看日志上面应该还有其他报错

@hxicoder
Copy link

@wangfenjin @yugaoxiang
报错日志:
/Users/daw/Documents/GitHub/simple/build-ios/cppjieba/src/cppjieba/include/cppjieba/QuerySegment.hpp:7:10: fatal error:
'limonp/Logging.hpp' file not found
#include "limonp/Logging.hpp"
^~~~~~~~~~~~~~~~~~~~
1 error generated.

** BUILD FAILED **

The following build commands failed:
CompileC /Users/daw/Documents/GitHub/simple/build-ios/src/simple-tokenizer.build/Release-iphoneos/simple.build/Objects-normal/arm64/entry.o /Users/huangxing/Documents/GitHub/simple/src/entry.cc normal arm64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'simple' from project 'simple-tokenizer')
(1 failure)
-- Up-to-date: /Users/daw/Documents/GitHub/simple/./output/bin/dict
-- Up-to-date: /Users/daw/Documents/GitHub/simple/./output/bin/dict/pos_dict
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/pos_dict/prob_trans.utf8
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/pos_dict/prob_emit.utf8
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/pos_dict/char_state_tab.utf8
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/pos_dict/prob_start.utf8
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/stop_words.utf8
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/hmm_model.utf8
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/user.dict.utf8
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/idf.utf8
-- Installing: /Users/daw/Documents/GitHub/simple/./output/bin/dict/jieba.dict.utf8
CMake Error at src/cmake_install.cmake:74 (file):
file INSTALL cannot find
"/Users/daw/Documents/GitHub/simple/build-ios/src/Release-iphoneos/libsimple.a":
No such file or directory.
Call Stack (most recent call first):
cmake_install.cmake:62 (include)

@wangfenjin
Copy link
Owner

更新下代码应该可以了

@hxicoder
Copy link

更新下代码应该可以了

嗯嗯已更新了最新代码,编译成功了,非常感谢!

@hxicoder
Copy link

嗯嗯,我主要用的还是这边的代码,参考了#73,可以用build-ios.sh编译,也可以在#73这个页面找到回复,直接下载“boyan01” 大佬的代码,把Libs这个文件夹拖到项目里,注意用到这个库的地方要把文件改成.mm否则编译不过,代码很少跟simple简介差不多 NSString *fts = @" CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'simple')"; BOOL result = [db executeUpdate: fts];

BOOL result = [db executeUpdate:@"insert into 't1' values(?)" withArgumentsInArray:@[@"周杰伦 Jay Chou:最美的不是下雨天,是曾与你躲过雨的屋檐"]]; NSString *sql = @"select * from t1 where x match simple_query('zhoujiel')";FMResultSet *result = [db executeQuery:sql]; iOS开发者看到这里基本应该会了,我完成这个功能后也会找时间,写一个文章出来。

您好,请问你是用sqlite3_auto_extension((void (*)(void)) sqlite3_simple_init);这种方式加载的吗?我试了下发现这个api在iOS8.2版本已经废弃了,iOS8以上系统不支持这种设置,最新的Xcode版本支持的最低版本为iOS9.0,所以这种方式无效,然后我用FMDB获取到db对象后试着将db对象传入sqlite3_simple_init方法后,直接报坏地址访问错误,请问你遇到这样的问题没,怎么解决的呢?

@yugaoxiang
Copy link
Author

这个是sqlite的api吧?更新一下看看,这个可以用的,使用db之前,调用一下这个函数就可以了

@hxicoder
Copy link

这个是sqlite的api吧?更新一下看看,这个可以用的,使用db之前,调用一下这个函数就可以了

我试了几次,确实不行,

这个是api 警告提示
'sqlite3_auto_extension' is deprecated: first deprecated in iOS 8.2 - Process-global auto extensions are not supported on Apple platforms

这个是sql报错:
2022-08-15 20:19:53.447788+0800 DBTest2[44237:2482123] Error calling sqlite3_step (1: no such tokenizer: simple) SQLITE_ERROR
2022-08-15 20:19:53.448107+0800 DBTest2[44237:2482123] DB Query: CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'simple')
2022-08-15 20:19:53.448256+0800 DBTest2[44237:2482123] Unknown error finalizing or resetting statement (1: no such tokenizer: simple)
2022-08-15 20:19:53.448366+0800 DBTest2[44237:2482123] DB Query: CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'simple')

@yugaoxiang
Copy link
Author

应该是分词器没有注册成功,要使用pod下来的sqlite,可以参考大佬的代码,方便的话截一下代码

@hxicoder
Copy link

应该是分词器没有注册成功,要使用pod下来的sqlite,可以参考大佬的代码,方便的话截一下代码

现在可以了,出错原因是第一次集成的FMDB三方库使用的sqlite是系统自带的所以设置sqlite3_auto_extension无效,现在集成带有SQLCipher的FMDB三方库后里面单独带有sqlite文件,然后使用该sqlite加载sqlite3_auto_extension就可以了

@wangfenjin
Copy link
Owner

@hxicoder 有时间可以做个小项目把怎么用这个展示一下,我看大家挺多问题的,我没能力写这样的demo

@hxicoder
Copy link

@hxicoder 有时间可以做个小项目把怎么用这个展示一下,我看大家挺多问题的,我没能力写这样的demo

没问题,demo已补充,地址:https://github.com/hxicoder/DBDemo.git

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants