问题描述
||
好的,我正在做一个简单的查找。我有一个NSString对象数组和一个要在数组元素中搜索的字符串。
直到我尝试将匹配项添加到用于保存搜索结果的新可变数组后,一切似乎都奏效了。 stringHolder变量获取字符串,resultsCollectorArray甚至获取正确数量的新元素,但是每个元素为空并且\“超出范围\”。方法如下:
@implementation NSArray (checkForString)
-(NSMutableArray *) checkForString: (NSString *) matchSought
{
long unsigned numberofArrayElements;
long unsigned loop = 0;
NSRange searchResults;
NSMutableArray * resultCollectorArray = [[NSMutableSet alloc] init];
id stringHolder;
numberofArrayElements = [self count];
while (loop < numberofArrayElements) {
searchResults.length = 0;
searchResults = [[self objectAtIndex: loop] rangeOfString: matchSought options:NSCaseInsensitiveSearch];
if (searchResults.length > 0) {
stringHolder = [self objectAtIndex: loop];
[resultCollectorArray addObject: stringHolder];
}
loop++;
}
return [resultCollectorArray autorelease];
}
回到程序的主要部分后,我得到了一个无法识别的选择器,该选择器发送给了可变数组,该可变数组应该接收该方法的结果。这是主要部分:
#import <Foundation/Foundation.h>
#import \"LookupInArray.h\"
int main (int argc,const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *testString = [[NSString alloc] initWithString: @\"ab\"];
NSMutableString * resultString = [[NSString alloc] init];
NSArray * theArray = [[NSArray alloc] initWithObjects: ...,nil]; // Actual code has the objects
NSMutableArray *resultArray = [[NSMutableArray alloc] init];
NSUInteger arrayCount = 0;
unsigned long loops = 0;
resultArray = [theArray checkForString: testString];
arrayCount = [resultArray count];
while (loops < arrayCount){
resultString = [resultArray objectAtIndex: loops]; // Here\'s where we get the unrecognized selector.
NSLog(@\"%@\",resultString);
loops++;
}
[pool drain]; // Also,I\'ll release the objects later. I just want to get what\'s above working first.
return 0;
}
我已经搜索了其他答案(现在已经有几个小时了),但是没有发现任何可以解决问题的方法。
任何和所有帮助将不胜感激。
并事先感谢。
解决方法
NSMutableArray * resultCollectorArray = [[NSMutableSet alloc] init];
是如此不正确。您正在创建一个可变集并将其分配给可变数组。
您无法识别选择器,因为objectAtIndex:
不是NSMutableSet
的有效选择器。发表声明
NSMutableArray * resultCollectorArray = [[NSMutableArray alloc] init];
更好的方法
NSArray * filteredArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@\"SELF contains[cd] %@\",searchString]];
您可以使用谓词直接过滤数组。这样,您就可以一步完成。 :)