2012-03-31 65 views
3

我正在使用sqlite数据库。 我从sqlite数据库检索文本数据到名为myArray的NSMutableArray。 在那个myArray变量中,有一列名为“info”的文本数据。 之后我找回数据到NSMutableArray里,我想所有的文本数据转换的从SQLite数据库为小写。 我在searchBar的textDidChange事件中编写了如下代码。如何在iOS中将NSMutableArray对象的NSString数据转换为小写字母?

NSInteger counter = 0; 
    for(NSString *nameMe in myArray) 
    { 
     NSRange r = [[nameMe lowercaseString] rangeOfString:[searchText lowercaseString]]; 

     if(r.location != NSNotFound) 
     { 
      if(r.location== 0) 
      { 
       [tableData addObject:nameMe]; 
      } 
     } 

     counter++; 
    } 

但是,在lowercaseString中发生错误。

此错误是

2012-03-31 16:28:18.217 SqliteTest[1812:f803] -[MyInfoClass lowercaseString]: unrecognized selector sent to instance 0x6da9210 
2012-03-31 16:28:18.276 SqliteTest[1812:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyInfoClass lowercaseString]: unrecognized selector sent to instance 0x6da9210' 

我觉得编译器不知道如何对象数据转换为小写。 我该如何解决这个问题? 我可以将对象(NSString)数据转换为小写。 如果可以,请让我知道如何做到这一点。 感谢您的帮助。

+0

你肯定myArray的包含NSString对象?你是如何初始化myArray的?请添加它的定义,并明确地显示在哪里行1812 – giorashc 2012-03-31 10:28:44

+0

我相信myArray包含NSString对象。我在viewDidLoad中初始化事件类似的“self.myArray = [MyInfo的getInitialData];” – 2012-03-31 10:33:37

+0

,我和搜索栏的搜索文本。它只与casesenstative匹配。如果我的数据库中的数据是“苹果”,我无法用苹果搜索这些数据。所以我用大写字母输入了所有的字符。那是我的问题。请帮忙。 – 2012-03-31 10:35:48

回答

16

我觉得编译器不知道如何对象数据转换为小写。

问题是MyInfoClass类型的对象没有方法-lowercaseString。你遍历数组假设数组中的每个对象是NSString过,但是这显然是不正确的 - 肯定有在myArray MyInfoClass的至少一个实例。所以,解决这个问题的一种方法是确保只向数组添加字符串。

这里是做你正在做的事情上面一个短,更安全的方式:

NSArray *lowercaseArray = [myArray valueForKey:@"lowercaseString"]; 

NSArray的-valueForKey:将发送-valueForKey:消息您都提供对阵列中的每个对象的关键,并收集结果数组。更好的是,如果数组中的某个对象返回nil,则结果数组将包含该索引处的NSNull对象。当你使用数组时,你会想检查那些NSNull的,但是你不会像你在代码中那样得到一个异常。

更新:从OP的评论,似乎将数组转换为小写的原因是为了使大小写不敏感的搜索成为可能。值得指出的是,有更好的方法来实现这一点。这里有两个:

  • 使用NSString的-caseInsensitiveCompare:方法比较字符串,如果你正在做自己的比较。

  • 如果您使用谓词来搜索匹配项,请将字符串比较运算符(LIKE,CONTAINS等)与不区分大小写的选项一起使用:@“SELF like [c]%@”。您可能还需要不符号的变音符号:@“SELF like [cd]%@”。

+0

谢谢你的回答。这是我想要的。再次感谢。 :) – 2012-03-31 14:52:41

相关问题