方法创建一个包含11个对象的数组,全部超出范围,无法识别的选择器结果

cta*_*art 3 objective-c unrecognized-selector

好的,我正在做一个简单的查找.我有一个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];

}
Run Code Online (Sandbox Code Playgroud)

一旦我们回到程序的主要部分,我得到一个无法识别的选择器发送到应该接收该方法结果的可变数组.这是主要部分:

#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;
}
Run Code Online (Sandbox Code Playgroud)

我已经搜索了其他答案(现在几个小时),但没有看到任何解决问题的方法.

任何和所有的帮助将非常感激.

并事先感谢.

Dee*_*olu 8

NSMutableArray * resultCollectorArray = [[NSMutableSet alloc] init];是如此不正确.您正在创建一个可变集并将其分配给可变数组.

您正在获得无法识别的选择器,因为objectAtIndex:它不是有效的选择器NSMutableSet.发表声明,

NSMutableArray * resultCollectorArray = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

一个更好的方法

NSArray * filteredArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchString]];
Run Code Online (Sandbox Code Playgroud)

您可以使用谓词直接过滤数组.这样您只需一步即可完成此操作.:)