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

时间:2011-06-12 03:48:11

标签: 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];

}

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

#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;
}

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

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

事先谢谢。

1 个答案:

答案 0 :(得分:8)

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

由于objectAtIndex:不是NSMutableSet的有效选择器,因此您无法识别选择器。发表声明,

NSMutableArray * resultCollectorArray = [[NSMutableArray alloc] init];

更好的方式

NSArray * filteredArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchString]];

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