Метод Создает массив с 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]];
Вы можете напрямую фильтровать массив, используя предикаты. Таким образом, вы делаете это за один шаг.:)