Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何转换NSMutableArray对象';在iOS中将NSString数据转换为小写?_Objective C_Ios - Fatal编程技术网

Objective c 如何转换NSMutableArray对象';在iOS中将NSString数据转换为小写?

Objective c 如何转换NSMutableArray对象';在iOS中将NSString数据转换为小写?,objective-c,ios,Objective C,Ios,我正在使用sqlite数据库。 我将文本数据从sqlite数据库检索到名为myArray的NSMutableArray中。 在myArray变量中,有一个名为“info”的列,其中包含文本数据。 在将该数据检索到NSMutableArray之后,我希望将sqlite数据库中的所有文本数据转换为小写。 我在searchBar的textDidChange事件中编写了如下代码 NSInteger counter = 0; for(NSString *nameMe in myArray)

我正在使用sqlite数据库。 我将文本数据从sqlite数据库检索到名为myArray的NSMutableArray中。 在myArray变量中,有一个名为“info”的列,其中包含文本数据。 在将该数据检索到NSMutableArray之后,我希望将sqlite数据库中的所有文本数据转换为小写。 我在searchBar的textDidChange事件中编写了如下代码

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++;
    }
但是,小写字母中出现了一个错误

这个错误是错误的

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)数据转换为小写。 如果可以的话,请告诉我怎么做。 谢谢你的帮助

我认为编译器不知道如何将对象数据转换成小写

问题是MyInfoClass类型的对象没有方法
-小写的
。假设数组中的每个对象都是
NSString
,则在数组中进行迭代,但这显然不是真的-
myArray
中肯定至少有一个MyInfoClass实例。因此,解决此问题的一种方法是确保只向数组中添加字符串

以下是一种更短、更安全的方法来完成上述工作:

NSArray *lowercaseArray = [myArray valueForKey:@"lowercaseString"];
NSArray的
-valueForKey:
将向数组中的每个对象发送一条
-valueForKey:
消息,其中包含您提供的密钥,并在数组中收集结果。更好的是,如果数组中的某个对象返回nil,则生成的数组将在该索引处包含一个NSNull对象。在使用数组时,您可能希望检查这些NSNull,但不会像代码中那样出现异常

更新:从OP的评论来看,将数组转换为小写似乎是为了实现不区分大小写的搜索。值得指出的是,有更好的方法来实现这一点。这里有两个:

  • 如果您自己进行比较,请使用NSString的
    -caseInsensitiveCompare:
    方法来比较字符串

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


您确定myArray包含NSString对象吗?您是如何初始化myArray的?请添加其定义并明确显示第1812行的位置,我确信myArray包含NSString对象。我在ViewDidLoad事件中初始化了“self.myArray=[myInfo getInitialData];”并使用搜索栏的文本进行搜索。它只与casesenstative匹配。如果我的数据库中的数据是“苹果”,我就不能用苹果搜索这些数据。所以我用大写字母输入所有字符。这是我的问题。请帮忙。谢谢你的回答。这正是我想要的。再次感谢。:)