2011-06-12 1 views
3

좋아요, 그래서 간단한 조회를하고 있습니다. NSString 객체의 배열과 배열 요소에서 검색 할 문자열이 있습니다.메서드는 11 개의 개체, 범위를 모두 벗어남, 인식 할 수없는 선택기 결과로 배열을 만듭니다.

검색 결과를 보관할 수 있도록 변경 가능한 새로운 배열에 일치 항목을 추가하기 전까지는 모두 문제가 있습니다. 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]; 

} 

우리가 프로그램의 주요 부분에 일단

, 나는 방법의 결과를받을 예정 된 변경 가능한 배열에 보낸 인식 할 수없는 선택기를 얻을 : 여기에 방법입니다. 여기에 주요 섹션이 있습니다 :

다른 답변 (수 시간 동안)을 검색했지만 문제를 해결하지 못했습니다.

모든 도움은 정말 감사하겠습니다.

그리고 미리 감사드립니다.

답변

8

NSMutableArray * resultCollectorArray = [[NSMutableSet alloc] init];이 너무 잘못되었습니다. 변경할 수있는 배열을 만들고 변경 가능한 배열에 할당하려고합니다.

objectAtIndex:NSMutableSet의 올바른 선택자가 아니기 때문에 인식 할 수없는 선택자가 표시됩니다.

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

더 좋은 방법

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

직접 술어를 사용하여 배열을 필터링 할 수 있습니다, 그 진술을 확인합니다. 이렇게하면 한 번에 이렇게 할 수 있습니다. :)

+0

+1 Deepak ...... – Legolas

+4

'resultString'도 잘못되었습니다. – bbum

+0

Deepak, 감사합니다. 나는 그것이 무언가 복잡해야 했음에 틀림 없다고 생각하고 있었다. 또한 NSPredicate에 대한 추가 정보를 주셔서 감사합니다. 나는 이것을 (당신이 짐작할 수 있듯이) 새로운 것입니다. – ctaggart

관련 문제