gpt4 book ai didi

objective-c - iOS 中如何将 NSMutableArray 对象的 NSString 数据转换为小写?

转载 作者:可可西里 更新时间:2023-11-01 06:18:18 25 4
gpt4 key购买 nike

我正在使用 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++;
}

但是在 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) 数据转换为小写吗?如果可以,请告诉我该怎么做。感谢您的帮助。

最佳答案

I think that compiler doesn't know how to convert object data into lowercase.

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

这里有一个更短、更安全的方法来完成你上面所做的事情:

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

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

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

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

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

关于objective-c - iOS 中如何将 NSMutableArray 对象的 NSString 数据转换为小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9955009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com