Метод Создает массив с 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;
}

Я искал другие ответы (в течение нескольких часов), но не видел ничего, что решило бы проблему.

Любая помощь будет очень цениться.

И спасибо заранее.

1 ответ

Решение

NSMutableArray * resultCollectorArray = [[NSMutableSet alloc] init]; это так неправильно. Вы создаете изменяемый набор и присваиваете его изменяемому массиву.

Вы получаете нераспознанный селектор, потому что objectAtIndex: не является действительным селектором для NSMutableSet, Сделай это заявление,

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

Лучший способ

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

Вы можете напрямую фильтровать массив, используя предикаты. Таким образом, вы делаете это за один шаг.:)

Другие вопросы по тегам