五十七、基础框架(十五)创建 地址簿-5

来源:互联网 发布:soaoffice java 编辑:程序博客网 时间:2024/06/18 06:13

在前面一篇博文中,我  说到过  search:这项措施  显得  很原始,因为  这项措施  无法找到  部分匹配的结果,也无法找到  多个匹配的结果。于是  我们  需要修改一下  search:这项措施。其中  AddressBook.h这个文件中的search:  修改成  这样。

AddressBook.m这个文件中  search:这项措施的实施细则  修改成  这样:

为了  search:这项措施  能够找到  多个匹配的结果,其结果类型  由AddressBook类型的物件  换成了  可修改数组,也就是  NSMutableArray类型的物件,这样  就可以容纳  多个结果。

在search:这项措施中,我  首先  创建了  一个NSMutableArray类型的数组物件matches,用来  存储  匹配结果。

接着  同样  用  快速枚举  将book中的地址卡片  一个一个地  依次  读取  到currentCard当中。

每读取  一张卡片,都会对  这张卡片中的姓名,也就是  currentCard.name,采取  rangeOfString:options:这项措施。

rangeOfString:options:这项措施  附带  两个参数。其中  第一个参数  是  需要在其实施对象中搜索的字符串,第二个参数  是  选项。在这里  我  将  需要搜索的内容,也就是  字符串nameToSearch,作为  第一个参数,将  NSCaseInsensitiveSearch  作为  第二个参数,NSCaseInsensitiveSearch  表示  忽略  大小写。

rangeOfString:options:这项措施所产生的结果  是  NSRange类型的组织,这个NSRange组织中的两个成员location  和  length  分别  用来表示  rangeOfString:options:这项措施的参数所代表的字符串  在其实施对象所代表的字符串中的位置  和  长度。如果  rangeOfString:options:这项措施  在其实施对象所代表的字符串中  没有找到  其参数所代表的字符串,那么  它所产生的结果中的成员location的值  就是  NSNotFound  用来表示  没有找到。

for()循环中的if()语句  会判断  rangeOfString:options:这项措施所产生的结果中location这个成员的值  是否不是  NSNotFound,如果  不是,就表明  需要搜索的字符串  在当前的卡片当中  找到了,于是  就会执行

这行语句,将  当前的卡片  添加  到数组物件matches当中。在search:这项措施的最后

这行语句  会将  存储着匹配结果的数组物件matches  作为结果  传递回去。

接下来  我们  来看看  经过修改的search:措施  是否能够  如我们所愿地  工作:

运行  这个程序后,可以得到  这样的结果:

在这个程序中  我  在地址簿myBook当中  搜索了  字符串”ia”,并且  将  结果  存储  在可修改数组物件cardsWanted当中。

接着  我  对cardsWanted这个数组物件  采取了  count这项措施,用来计算  cardsWanted这个物件中的卡片的数量。如果  cardsWanted这个数组物件中的卡片数量  不为  0,那么  就利用  快速枚举  将  其中的卡片  依次  读取  并且  显示出来;如果  cardsWanted这个数组物件中的卡片数量  为  0,那么  就提示  用户  什么  也没有找到。


原创粉丝点击