发明内容
为了克服现有技术中的上述不足,本申请的目的在于提供一种文本查询方法,应用于电子设备,所述电子设备安装有应用程序,所述应用程序中植入有预设的检索模块,所述方法包括:
通过所述检索模块在所述应用程序中提供一个搜索界面,并在所述搜索界面显示一搜索框及搜索按钮;
在检测到所述搜索按钮被点击时,获取用户在所述搜索框中输入的查询语句;
在该电子设备的全局队列中异步调用NSPredicate方法,从所述应用程序预设的第一数组中获得与所述查询语句相关的元素得到第二数组,其中,所述第一数组中的元素为字符串;
在所述应用程序的主队列中执行异步操作,将所述第二数组中的元素显示于所述搜索界面。
可选地,在上述方法中,所述在所述应用程序的主队列中执行异步操作,将所述第二数组中的元素显示与所述搜索界面的步骤,包括:
在所述应用程序的主队列中执行异步操作,检测当前所述搜索框中的字符串与所述查询语句是否相同;
若当前所述搜索框中的字符串与所述查询语句相同,则将所述第二数组中的元素显示于所述搜索界面。
可选地,在上述方法中,所述从预设第一数组中获得与所述查询语句相关的元素得到第二数组的步骤,包括:
针对所述第一数组中的每个元素,调用rangeOfString函数判断该元素中的字符串是否包含所述查询语句;
若该元素中的字符串包含所述查询语句,则将该元素的字符串存入所述第二数组中;
若该元素中的字符串不包含所述查询语句,则舍弃该元素。
可选地,在上述方法中,所述在所述应用程序中提供一个搜索界面,在所述搜索界面显示一搜索框及搜索按钮的步骤,包括:
通过tableView控件显示一搜索界面,并通过UISearchController控件在所述搜索界面显示一搜索框及搜索按钮。
本申请的另一目的在于提供一种文本查询装置,应用于电子设备,所述电子设备安装有应用程序,所述应用程序中植入有所述文本查询装置,所述装置包括:
第一显示模块,用于通过所述检索模块在所述应用程序中提供一个搜索界面,在所述搜索界面显示一搜索框及搜索按钮;
获取模块,用于在检测到所述搜索按钮被点击时,获取用户在所述搜索框中输入的查询语句;
查询模块,用于在该电子设备的全局队列中异步调用NSPredicate方法,从预设第一数组中获得与所述查询语句相关的元素得到第二数组,其中,所述第一数组中的元素为字符串;
第二显示模块,用于在所述应用程序的主队列中执行异步操作,将所述第二数组中的元素显示于所述搜索界面。
可选地,在上述装置中,所述第二显示模块在所述应用程序的主队列中执行异步操作,检测当前所述搜索框中的字符串与所述查询语句是否相同;
若当前所述搜索框中的字符串与所述查询语句相同,则将所述第二数组中的元素显示与所述搜索界面。
可选地,在上述装置中,所述查询模块在从预设第一数组中获得与所述查询语句相关的元素得到第二数组时,
针对所述第一数组中的每个元素,调用rangeOfString函数判断该元素中的字符串是否包含所述查询语句;
若该元素中的字符串包含所述查询语句,则将该元素的字符串存入所述第二数组中;
若该元素中的字符串不包含所述查询语句,则舍弃该元素。
可选地,在上述装置中,所述第一显示模块通过tableView控件显示一搜索界面,并通过UISearchController控件在所述搜索界面显示一搜索框及搜索按钮。
本申请的另一目的在于提供一种电子设备,包括处理器及和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,处理器执行所述机器可执行指令以实现本申请提供的文本查询方法。
本申请的另一目的在于提供一种机器可读存储介质,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现本申请提供的文本查询方法。
相对于现有技术而言,本申请具有以下有益效果:
本申请提供的文本查询方法、装置及电子设备,通过在电子设备的应用程序中植入预设的检索模块,在应用程序中显示一个搜索界面。接收用户在该搜索界面输入的查询语句,并通过调用NSPredicate方法查询与所述查询语句相关的文本内容进行显示。如此,可以直接在应用程序中查询该应用程序内部文件中的文本内容,提高了查询的即时性,提高了应用程序的开发测试效率。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本申请的描述中,需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。
本实施例提供一种电子设备,所述电子设备可以是,但不限于,智能手机、个人电脑(personal computer,PC)、平板电脑、个人数字助理(personal digital assistant,PDA)、移动上网设备(mobile Internet device,MID)等。在本实施例中,所述电子设备的操作系统为iOS系统。
请参照图1,图1为所述电子设备100的方框示意图,包括文本查询装置110、存储器120及处理器130。
所述存储器120及处理器130相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,所述存储器120及处理器130相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述文本查询装置110包括至少一个可以软件或固件(firmware)的形式存储于所述存储器120中或固化在所述电子设备100的操作系统(operating system,OS)中的软件功能模块。所述处理器130用于执行所述存储器120中存储的可执行模块,例如所述文本查询装置110所包括的软件功能模块及计算机程序等。
其中,所述存储器120可以是,但不限于,随机存取存储器(Random AccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(ProgrammableRead-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-OnlyMemory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-OnlyMemory,EEPROM)等。其中,存储器120用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。
所述处理器130可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
请参照图2,图2为应用于图1所示的电子设备100的一种应用信息获取方法的流程图,其中,所述电子设备100安装有应用程序,并预先植入有预设的检索模块。以下将对所述方法包括各个步骤进行详细阐述。
步骤S110,通过所述检索模块在所述应用程序中提供一个搜索界面,并在所述搜索界面显示一搜索框及搜索按钮。
在本实施例中,首先,预先在所述应用程序中植入预设的检索模块,所述检索模块用于作为文本内容展示容器,在所述检索模块内设置一个文件浏览的功能,以将需要的文本内容显示到当前的控制器中。在所述检索模块中定义一个列表控制器,所述列表控制器通过tableView控件实现,将tableView添加到所述检索模块中,通过registerClass函数设置tableVIew的显示样式,同时设置tableView的数据源方法和代理方法。
然后,通过UISearchController控件定义一个搜索控制器的属性,这个属性是strong类型的,将这个属性名字设置为searchController。
在所述检索模块的初始化方法里面使用UISearchController控件的alloc函数创建一个搜索控制器,同时需要调用initWithSearchResultsController函数开进行初始化。其中,initWithSearchResultsController函数需要一个参数,在本实施例还中不需要填写初始化的方法,所以传入一个nil值。将所述搜索控制器的代理设置为self,以指代当前的所述检索模块。通过属性dimsBackgroundDuringPresentation函数设置在搜索的时候触摸搜索背景不消失搜索控制器,来设置
如此,通过所述检索模块可以在所述应用程序中显示一个列表视图,用于用来展示过滤后的内容的,并通过所述搜索控制器显示一搜索框及搜索按钮。
步骤S120,在检测到所述搜索按钮被点击时,获取用户在所述搜索框中输入的查询语句。
在本实施例中,所述搜索控制器带有搜索框,当用户需要搜索的时候在搜索框中输入需要搜索的文字。用户点击搜索按钮之后,就会触发searchText函数,通过seachController函数,拿到seachController的searchBar,通过searchBar获取搜索框中的文字。
步骤S130,在该电子设备100的全局队列中异步调用NSPredicate方法,从所述应用程序预设的第一数组中获得与所述查询语句相关的元素得到第二数组,其中,所述第一数组中的元素为字符串。
在本实施例中,从步骤S120获取到的查询语句为searchString,获取到查询语句后,需要获取串行队列,在串行队列中执行异步的方法。
具体地,首先,获得系统的默认的串行队列的队列优先级,这个队列的优先级为DISPATCH_QUEUE_PRIORITY_DEFAULT即默认的优先级,使用dispatch_get_global_queue方法获得一个全局队列,通过dispatch_async函数在这个队列中完成异步的任务。
在该异步任务中使用NSPredicate方法调用predicateWithBlock函数,predicateWithBlock函数的作用是创建和返回一个NSPredicate任务,NSPredicate任务的过滤是通过一个对象和和一个字典作为条件的,这个任务需要两个参数,通过这两个参数生成一个返回值。
在本实施例中,通过NSPredicate方法对所述应用程序的内部文件中预设的第一预数组进行查询。针对所述第一数组中的每个元素,调用rangeOfString函数判断该元素中的字符串与所述查询语句是否相同。rangeOfString函数将searchString作为参数,使用rangeOfString函数判断出当前检测的元素的字符串包含searchString。
若该元素中的字符串包含searchString,则将该元素的字符串存入所述第二数组中。若该元素中的字符串不包含searchString,则舍弃该元素。
基于上述设计,使用NSPredicate方法来检索,NSPredicate方法是iOS系统自带的一种方式,检索效率较高,在对数据搜索的时候使用了子线程的方式,搜索完毕之后展示搜索的内容的时候使用了主线程,更新UI的操作回到主线程进行,保证到了整个搜索的过程流畅性。
步骤S140,在所述应用程序的主队列中执行异步操作,将所述第二数组中的元素显示于所述搜索界面。
在本实施例中,首先通过dispatch_get_main_queue方法获得所述应用程序的主队列。在主队列中通过dispatch_async方法再执行一个异步操作。
具体地,请参照图3,在本实施例中,步骤S140可以包括子步骤S141及子步骤S142。
子步骤S141,在所述应用程序的主队列中执行异步操作,检测当前所述搜索框中的字符串与所述查询语句是否相同。
子步骤S142,若当前所述搜索框中的字符串与所述查询语句相同,则表示用户正在执行查询操作,使tableView调用reloadData方法将所述第二数组的内容显示出来。
请参照图4,本实施例还提供一种应用于图1所示电子设备100的文本查询装置110,所述装置包括第一显示模块111、获取模块112、查询模块113及第二显示模块114。
所述第一显示模块111,用于通过所述检索模块在所述应用程序中提供一个搜索界面,在所述搜索界面显示一搜索框及搜索按钮。
本实施例中,所述第一显示模块111可用于执行图2所示的步骤S110,关于所述第一显示模块111的具体描述可参对所述步骤S110的描述。
所述获取模块112,用于在检测到所述搜索按钮被点击时,获取用户在所述搜索框中输入的查询语句。
本实施例中,所述获取模块112可用于执行图2所示的步骤S120,关于所述获取模块112的具体描述可参对所述步骤S120的描述。
所述查询模块113,用于在该电子设备100的全局队列中异步调用NSPredicate方法,从预设第一数组中获得与所述查询语句相关的元素得到第二数组,其中,所述第一数组中的元素为字符串。
本实施例中,所述查询模块113可用于执行图2所示的步骤S130,关于所述查询模块113的具体描述可参对所述步骤S130的描述。
所述第二显示模块114,用于在所述应用程序的主队列中执行异步操作,将所述第二数组中的元素显示于所述搜索界面。
本实施例中,所述第二显示模块114可用于执行图2所示的步骤S140,关于所述第二显示模块114的具体描述可参对所述步骤S140的描述。
可选地,在本实施例中,所述第二显示模块114在所述应用程序的主队列中执行异步操作,检测当前所述搜索框中的字符串与所述查询语句是否相同;
若当前所述搜索框中的字符串与所述查询语句相同,则将所述第二数组中的元素显示与所述搜索界面。
可选地,在本实施例中,所述查询模块113在从预设第一数组中获得与所述查询语句相关的元素得到第二数组时,
针对所述第一数组中的每个元素,调用rangeOfString函数判断该元素中的字符串与所述查询语句是否相同;
若该元素中的字符串与所述查询语句相同,则将该元素的字符串存入所述第二数组中;
若该元素中的字符串与所述查询语句相不同,则舍弃该元素。
可选地,在本实施例中,所述第一显示模块111通过tableView控件显示一搜索界面,并通过UISearchController控件在所述搜索界面显示一搜索框及搜索按钮。
综上所述,本申请提供的文本查询方法、装置及电子设备,通过在电子设备的应用程序中植入预设的检索模块,在应用程序中显示一个搜索界面。接收用户在该搜索界面输入的查询语句,并通过调用NSPredicate方法查询与所述查询语句相关的文本内容进行显示。如此,可以直接在应用程序中查询该应用程序内部文件中的文本内容,提高了查询的即时性,提高了应用程序的开发测试效率。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。