方法创建一个具有11个对象的数组,所有对象均超出范围,选择器结果无法识别

问题描述

|| 好的,我正在做一个简单的查找。我有一个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]];
您可以使用谓词直接过滤数组。这样,您就可以一步完成。 :)     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...