3

さて、それで、私は単純なルックアップを行っています。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;
}

私は他の答えを(今何時間も)検索しましたが、問題を解決するものは何も見つかりませんでした。

ありとあらゆる助けを本当にいただければ幸いです。

そして、事前に感謝します。

4

1 に答える 1

8

NSMutableArray * resultCollectorArray = [[NSMutableSet alloc] init];とても間違っています。可変セットを作成し、それを可変配列に割り当てています。

objectAtIndex:はの有効なセレクターではないため、認識されないセレクターが表示されNSMutableSetます。その声明を出しなさい、

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

より良い方法

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

述語を使用して配列を直接フィルタリングできます。このようにして、これを1つのステップで実行します。:)

于 2011-06-12T03:51:30.967 に答える